4

我正在使用正则表达式来验证具有以下条件的手机号码:

  1. 最多 12 个数字。
  2. 它应该从零开始。
  3. 将只允许一个空格(在未定义的点)
  4. 后跟一个可选的分机号码,长度最多为五位数,不包括#号

我的正则表达式如下所示:(我已经用“rubular”测试器对此进行了测试)

^((0((?=\d* \d*#)[\d ]{,11})(#\d{,5})?)|(0(?:\d{,10})(#\d{,5})?)|(0((?=\d* \d*$)[\d ]{,11})))$

但它不适用于 .net 正则表达式引擎。

有人可以告诉我,在上面的哪一部分不适用于 .net 正则表达式引擎?如果我可以更改上述表达式中的任何内容,它将在.Net 正则表达式引擎中工作吗?

4

1 回答 1

2

正则表达式中的唯一问题是您没有在任何地方指定起始范围..所以它应该是{0,11}{1,11}不是{,11}


您也可以使用这个简化的正则表达式

^(?=(\S*[\s]\S*|\S*)$)0(\s?\d){1,11}\s?(#(\s?\d){1,5})?\s?$

\S匹配任何不是空格的字符

(\S*[\s]\S*|\S*)$匹配 0 到多个非空格字符后跟一个空格,然后匹配 0 到多个非空格字符直到结束,或者它匹配所有非空格字符直到结束

(?=)是一个positive lookahead检查特定模式是否发生,如果没有,它将不匹配!

于 2012-12-07T11:22:31.103 回答