0

可能重复:
正则表达式,用于验证带有一个空格和一个可选特殊字符的数字

我必须编写一个正则表达式来验证如下所示的手机号码:

a).最多 12 个字符

b).将允许一个空间(在一个未定义的点)

c).必须以 0 开头

d).后跟一个可选的分机号码,长度最多为五位数,不包括#号

我尝试使用以下方法获得 0-12 个数字。但我不知道如何添加可选的分机号码部分(# 和后跟数字)

^(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))$ 
4

2 回答 2

1

您需要为每种格式创建正则表达式。然后,您可以使用交替构造将它们组合成一个正则表达式|

第一种模式是最棘手的模式,但您已经提供了一种方法来解决它,方法是自己使用零宽度正前瞻断言(这里我假设只允许数字之间使用空格):

(?=\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}$
于 2012-12-05T10:29:46.083 回答
0

试试这个正则表达式。它将满足 a,b,c 和 d 条件

(?<=^)([\d\s]{13}|\d{12}|0\d{11}|\d{5})(?=$)
于 2012-12-05T10:36:03.210 回答