基本正则表达式用于“通用”电话号码

5
我需要一个正则表达式(用于ASP.NET网站)来验证电话号码。它应该是灵活的,唯一的限制是:
  • 至少应为9位数字
  • 不得包含字母
  • 可以包括空格、连字符和单个“+”
我已经在SO和Regexlib.com上搜索过,但我只找到了更多限制的表达式,例如英国或美国的电话号码。
6个回答

20
^\s*\+?\s*([0-9][\s-]*){9,}$

分解它:

^           # Start of the string
  \s*       # Ignore leading whitespace
  \+?       # An optional plus
  \s*       # followed by an optional space or multiple spaces
  (
     [0-9]  # A digit
     [\s-]* # followed by an optional space or dash or more than one of those
  )
   {9,}     # That appears nine or more times
$           # End of the string

我更喜欢以后一种方式编写正则表达式,因为这样更易于阅读和修改;大多数语言需要设置一个标志,例如C#中的RegexOptions.IgnorePatternWhitespace


请注意,这是一种非常宽松的方法;它将接受像“+--1---2345 - - - 678 9 -”这样的数字,并仅检查是否有至少九个数字以及加号只出现在开头。不过,我认为这正是您想要的。 - configurator

6
最好要求用户填写他的国家,然后为该国家应用正则表达式。每个国家都有自己的电话号码格式。

确实如此 - 没有标准,因此很难提供一个正则表达式,可以跨越所有领域进行匹配,而不会使其变得太普通以至于不能防止无效条目。 - GalacticCowboy
我想要一个灵活的格式。在这里(南非),没有严格的电话格式(例如0711231234,071 123 1234,071-123-1234,(071)123 1234都是可以接受的)。我猜掩码编辑框是最好的方法。 - robasta
在这种情况下,我想一个正则表达式可以接受恰好10个数字,并过滤掉(),和空格。 - Roy Dictus

5

\+?[\d- ]{9,}

这将匹配以加号开头的数字,长度至少为九个字符,包括破折号和空格。虽然这意味着破折号和空格也算作九个字符之一,但我建议删除破折号和空格,然后只使用

\+?[\d]{9,}


2

^[0-9-+ ]+$

<asp:RegularExpressionValidator runat="server" id="rgfvphone" controltovalidate="[control id]" validationexpression="^[0-9-+ ]+$" errormessage="Please enter valid phone!" />

0

这个非常通用,只允许包含在给定电话号码中所期望的字符,包括#。它忽略任何格式模式。

@"^([\(\)\+0-9\s\-\#]+)$"

0
@"^(?:\+?1[-. ]?)?\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$"

这是我使用的代码。它可以处理大多数情况下的通用电话号码验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接