最近我提出了电话号码的正则表达式,因为许多开发人员已经完成了这一点,我找到了与之相关的解决方案。 并在生产中使用相同的。
版本#1 仅包含数字:
@"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}"
但是还有一项要求:我们需要允许使用-
和(
)
等特殊字符。
所以我将正则表达式修改为版本#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个字符,我将再次使用正则表达式使其正常工作。
这是我发现使用正则表达式验证电话号码长度的问题。
这里的示例可以是123456789
- 想要将其标记为无效的电话号码,因为它只有 9 位数
这里的示例可以是1234567890123456
- 想要将其标记为无效的电话号码,因为它只有 16 数字
这里的示例可以是12(34567890
- 想将此标记为无效的电话号码,因为它只有左括号
目前,我通过在电话号码字段中添加自定义属性来实现上述目标。我真的想知道,如果我们可以通过修改正则表达式来实现上述目标吗?
答案 0 :(得分:1)
您可以在开头使用带有(?=(?:\D*\d){10,15}\D*$)
正向前瞻的正则表达式:
^(?=(?:\D*\d){10,15}\D*$)\+?[0-9]{1,3}[\s-]?(?:\(0?[0-9]{1,5}\)|[0-9]{1,5})[-\s]?[0-9][\d\s-]{5,7}\s?(?:x[\d-]{0,4})?$
请参阅regex demo。
<强>详情:
^
- 字符串开头(?=(?:\D*\d){10,15}\D*$)
- 一个积极的预测,确保有10到15个非数字序列后跟1位数字,然后有0+个数字直到字符串结尾 < / LI>
\+?
- 可选的+
符号[0-9]{1,3}
- 1至3位数字[\s-]?
- 可选的空格或-
(?:\(0?[0-9]{1,5}\)|[0-9]{1,5})
- 两种选择中的任何一种:
\(0?[0-9]{1,5}\)
- (
,1到5位数,)
|
- 或[0-9]{1,5}
- 1到5位[-\s]?
- 可选的空格或-
[0-9]
- 数字[\d\s-]{5,7}
- 5到7位数字,空格或-
\s?
- 一个可选的空格(?:x[\d-]{0,4})?
- 可选序列:
x
- 文字x
[\d-]{0,4}
- -
$
- 字符串结束。