【发布时间】:2017-12-16 17:15:05
【问题描述】:
最近我想出了一个电话号码的正则表达式,因为许多开发人员已经这样做了,我找到了一个与之相关的解决方案。 并在生产中使用它。
版本#1只有数字:
@"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}"
但是还有一个额外的要求:我们需要允许像-和(这样的特殊字符)
所以我将正则表达式修改为 Version#2 如下所述:
@"^([\+]?[0-9]{1}[0-9]{0,2})[\s-]?[\(]?(0?[0-9]\d{0,4}[\)]?[-\s]?)([0-9][\d-\s]{5,7}[\s]?)(x[\d-]{0,4})?$"
现在,在验证电话号码的长度时,QA 发现它可以接受超过 16 个字符,我必须再次处理正则表达式以使其正常工作。
这是我发现与使用正则表达式验证电话号码长度有关的问题。
- 有没有办法通过修改正则表达式来表明电话号码应该接受最小长度为10,最大长度为15?
此处的示例可能是 123456789 - 要将其标记为无效电话号码,因为它只有 9 位
此处的示例可能是 @ 987654329@ - 想要将此标记为无效电话号码,因为它只有 16 位数字
- 有没有办法通过修改正则表达式来表示电话号码内的单左括号和单右括号无效?
此处的示例可能是 12(34567890 - 想要将其标记为无效电话号码,因为它只有 左括号
目前,我通过向电话号码字段添加自定义属性来实现上述目标。我真的很想知道,是否有办法通过修改正则表达式本身来实现上述目标?
【问题讨论】:
-
您可以使用一种替代方式,一种匹配括号中的数字,另一种匹配不带括号的数字。
-
您能再发布一些测试数据吗? (我不太了解不同的电话号码格式)
-
你为什么要为此制作一个困难的正则表达式?我的意思是..如果您在任何电话中拨打任何号码,您将不会输入特殊字符,可能除了加号。我会简单地将所有内容过滤掉,这不是数字并在之后对其进行格式化。
-
如果您将 Version#2 更改为
^(\+?\d{1,3})[\s-]?\(?(0?\d{1,5}\)?[-\s]?)(\d[\d-\s]{5,7}\s?)(x[\d-]{0,4})?$,它会更易于阅读(并且可以排成一行)。和你的意思一模一样,只是删减了一些东西。
标签: c# regex phone-number