繁体   English   中英

简单的电话号码正则表达式以匹配数字,空格等

[英]Simple phone number regex to match numbers, spaces, etc

我正在尝试在C#中修改一个相当基本的正则表达式模式,以测试电话号码。

模式是-

[0-9]+(\.[0-9][0-9]?)?

我有两个问题-

1)现有的表达式确实可以工作(尽管它是限制性的),但是我不太理解它是如何工作的。 解决类似问题的正则表达式看起来更像是这个-

/^[0-9()]+$/

2)如何扩展此模式以允许方括号,句号和单个空格分隔数字。 我尝试了一些变化以包括-

[0-9().+\s?](\.[0-9][0-9]?)?

虽然我似乎无法创建有效的模式。

任何帮助将非常感激。

谢谢,

字符集后的+至少是一个量词(表示前面的字符,字符集或组被重复),并且次数不限且贪婪(最匹配)。

然后[0-9().+\\s]+将匹配集合中的任何字符一次或多次。

[0-9]+(\.[0-9][0-9]?)?

首先,我建议您查看regexr.com或regex101.com,这样您自己就可以了解regex的工作原理。 这两个网站都会为您提供有关正则表达式中每个符号作用的逐步说明。

现在,您必须了解的主要内容之一是regex具有特殊字符 其中包括以下内容: []().-+*?\\^$ 因此,如果您希望您的正则表达式匹配文字. ,例如,您必须对其进行转义,因为它是一个特殊字符。 为此,请使用\\. [.] 反斜杠用于转义其他字符,而[]表示“匹配此集合中的任何一个字符”。 一些特殊字符在这些括号内没有特殊含义,并且不需要转义。

因此,上面的正则表达式将匹配长度为1或更大的数字的任意组合,后跟可选的后缀(foobar)? ,必须是一个点,后跟一个或两个数字。 实际上,此正则表达式似乎更应该与小数点匹配,点号后面最多可以有两位数字,而不是电话号码。

/^[0-9()]+$/

这非常简单-匹配长度为1或更大的数字或圆括号的任何组合。

[0-9().+\s?](\.[0-9][0-9]?)?

您在这里匹配的是:

  • 数字,圆括号,点,加号,空格或问号之一; 只有一次
  • (可选)后跟一个点和一个或两位数字

适合您的正则表达式可以是:

(\+\d{2})?((\(0\)\d{2,3})|\d{2,3})?\d+

在上面提到的网站之一中输入此内容以了解其工作原理。 我对其进行了一些修改,例如+49 1234567890。此外,为简单起见,我不包含空格-因此,使用此正则表达式时,必须首先删除输入中的所有空格。 在C#中,可以使用yourString.Replace(" ", ""); (简单地用空格替换所有空格=删除空格)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM