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