我正在尝试在C#中修改一个相当基本的正则表达式模式来测试电话号码 .
模式是 -
[0-9]+(\.[0-9][0-9]?)?
我有两个问题 -
1)现有的表达式确实有效(虽然它是相当严格的)但我不太明白它是如何工作的 . 类似问题的正则表达式看起来更像是这个 -
/^[0-9()]+$/
2)如何扩展此模式以允许括号,句点和单个空格分隔数字 . 我尝试了一些变化包括 -
[0-9().+\s?](\.[0-9][0-9]?)?
虽然我似乎无法创建有效的模式 .
任何帮助将非常感激 .
谢谢,
2 回答
首先,我建议您查看regexr.com或regex101.com,这样您就可以了解正则表达式的工作原理 . 这两个网站都会逐步解释正则表达式中每个符号的作用 .
现在,您必须了解的主要事项之一是正则表达式具有特殊字符 . 其中包括以下内容:
[]().-+*?\^$
. 因此,例如,如果您希望正则表达式匹配文字.
,则必须将其转义,因为它是一个特殊字符 . 为此,请使用\.
或[.]
. 反斜杠用于转义其他字符,而[]
表示"match any one of the characters in this set" . 一些特殊字符不需要转义 .因此,上面的正则表达式将匹配长度为1或更长的任何数字组合,后跟可选后缀
(foobar)?
,后缀必须是一个点,后跟一个或两个数字 . 事实上,这个正则表达式看起来更像它应该匹配十进制数字与点后面最多两位数 - 而不是电话号码 .这样做非常简单 - 匹配长度为1或更大的数字或圆括号的任意组合 .
你在这里匹配的是:
之一:数字,圆括号,点,加号,空格或问号;但只有 exactly once !
可选地后跟一个点和一个或两个数字
适合您目的的正则表达式可以是:
在上面提到的其中一个网站中输入此内容,以了解其工作原理 . 我修改了一点也允许,例如49 123 4567890.另外,为简单起见,我没有包含空格 - 所以当使用这个正则表达式时,你必须首先删除输入中的所有空格 . 在C#中,应该可以使用
yourString.Replace(" ", "");
(只需将所有空格替换为无=删除空格)字符集后面的
+
是一个量词(意味着前面的字符,字符集或组重复)至少一次,无限次,并且它是贪婪的(尽可能匹配) .然后
[0-9().+\s]+
将匹配集合中的任何字符一次或多次 .