我必须编写一个正则表达式来验证如下所示的手机号码:
a).最多 12 个字符
b).将允许一个空间(在一个未定义的点)
c).必须以 0 开头
d).后跟一个可选的分机号码,长度最多为五位数,不包括#号
我尝试使用以下方法获得 0-12 个数字。但我不知道如何添加可选的分机号码部分(# 和后跟数字)
^(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))$
我必须编写一个正则表达式来验证如下所示的手机号码:
a).最多 12 个字符
b).将允许一个空间(在一个未定义的点)
c).必须以 0 开头
d).后跟一个可选的分机号码,长度最多为五位数,不包括#号
我尝试使用以下方法获得 0-12 个数字。但我不知道如何添加可选的分机号码部分(# 和后跟数字)
^(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))$
您需要为每种格式创建正则表达式。然后,您可以使用交替构造将它们组合成一个正则表达式|
。
第一种模式是最棘手的模式,但您已经提供了一种方法来解决它,方法是自己使用零宽度正前瞻断言(这里我假设只允许在数字之间使用空格):
(?=\d+ \d+#)[\d ]{12}#\d{5}
下一个模式很简单:
\d{11}
您对最后一个模式的定义有点模糊,但做了各种假设,我选择了这个模式:
\d{1,12}#\d{1,5}
组合的正则表达式为:
^(?=\d+ \d+#)[\d ]{12}#\d{5}|\d{11}|\d{1,12}#\d{1,5}$
试试这个正则表达式。它将满足 a,b,c 和 d 条件
(?<=^)([\d\s]{13}|\d{12}|0\d{11}|\d{5})(?=$)