【问题标题】:Regular expression for adding special character to phone number为电话号码添加特殊字符的正则表达式
【发布时间】:2014-03-04 11:23:15
【问题描述】:

我添加了以下用于验证手机号码的正则表达式:

(^07[1,2,3,4,5,7,8,9][0-9]{7,8}$)

我也想允许用户输入一个# 字符,但我不知道该放在哪里。他们可能需要在拨号后输入# 字符,或者在开头用于拨打直拨号码或分机号码的号码。

【问题讨论】:

  • 所以你的电话号码也接受,
  • (^07[1,2,3,4,5,7,8,9|#][0-9|#]{7,8}$)?
  • 我使用的是c#语言
  • 都接受 11 或 12 的数字,但仍然不允许 #
  • 您可以使用 [1-9] 而不是 [1,2,3,4,5,7,8,9]?

标签: c# regex validation


【解决方案1】:

首先,您当前的正则表达式也匹配 07,12345678 格式的“数字”。所以你需要把[1,2,3,4,5,7,8,9]改成[1-9](当你在一个字符类的两个字符之间有一个-时,通常意味着有一个范围)

如果要接受可选的# 字符,可以使用? 量词,表示0 或1 次。

^#?07[1-9][0-9]{7,8}#?$

regex101 demo

除此之外,正如您在演示中看到的那样,它还将匹配带有两个哈希的数字;一个在前面,一个在最后。避免这种情况的一种选择是使用一些条件(C# 可以支持)。

^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$

regex101 demo

(?(1)|#?) 基本上意味着如果第一个哈希匹配,则不再匹配。否则,如果最初没有匹配哈希,那么它可以匹配一个哈希,如果数字末尾有一个。

在 C# 中,会有点像这样:

Regex.Match(myString, @"^(#)?07[1-9][0-9]{7,8}(?(1)|#?)$");

或者您可以使用负前瞻来确保数字中的哈希值永远不会超过一个:

^(?!.*#.*#.*$)#?07[1-9][0-9]{7,8}#?$

【讨论】:

  • 处理#只出现一次的好方法。
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2017-09-23
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多