【问题标题】:How to change this regular expression to work with .Net regular expression engine?如何更改此正则表达式以使用 .Net 正则表达式引擎?
【发布时间】:2012-12-07 11:17:51
【问题描述】:

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

  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 正则表达式引擎中工作吗?

【问题讨论】:

  • 也许是个愚蠢的问题,但是当你把它放在 C# 中时,你确实使用@"..." 字符串而不是"..." 字符串,对吧?
  • 能发一下C#代码吗?
  • 请不要发布问题againagainagainagain。编辑(第一个)帖子。

标签: c# .net regex vb.net


【解决方案1】:

您的正则表达式中的唯一问题是您没有在任何地方指定起始范围。所以它应该是{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,它检查是否出现特定模式,如果没有出现则不匹配!

【讨论】:

  • 嗨,谢谢你的帖子。我已经测试了你上面的表达式,但它允许超过一个空格。例如:012345 678 92。但它不应该允许。你能帮我吗?跨度>
  • 非常感谢。我已经测试了上面的一个,现在它只接受一个空格但是如果没有空格它会返回 false。(例如:0123456789)但这不应该发生。最多只有一个空格或没有空格。
  • 太棒了...它现在正在工作。你能解释一下上面的吗?
  • \S 带有大写“S”也匹配任何非空格字符。
  • @OlivierJacot-Descombes 嗯...这使它更紧凑..thxxx..编辑了答案
猜你喜欢
  • 1970-01-01
  • 2023-01-17
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多