mobilenumber和phonenumber的正则表达式

时间:2016-04-22 08:41:20

标签: regex phone-number

提供数据: 050359554和0478770213

我正在搜索一个正则表达式,检查该号码是否以04开头。 如果从04开始,则应该跟随6,7,8或9和7位数字。 否则,如果它仅从0开始而没有4,则应该跟随8位数。

我目前的正则表达式就像

/^(04[6789]\d{7})$|^(0\d{8})$/

这个的问题是,当我输入数字0478770213时,它已经说明了它在047877021的输入中没问题。但事实并非如此。

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

^0(?:4[6789]\d{7}|(?!4)\d{8})$

RegEx Demo

答案 1 :(得分:0)

您提供的正则表达式中有一个开关组,第一个是10位数的电话号码,第二个是9位数。

按照你的期望你说:

  

否则,如果它仅从0开始而没有4,则应该跟随8位数字。

但是在你的正则表达式中,你没有翻译"而没有4"

你的正则表达式应该是:

/^(04[6789]\d{7})$|^(0[0-35-9]\d{7})$/

但令我不安的是,9位数字 10位数电话号码是否合法? 我发誓这是一个错误,所以我建议你这样做:

/^(04[6789]\d{7})$|^(0[0-35-9]\d{8})$/

答案 2 :(得分:0)

您可以使用否定前瞻:

/^(04[6789]\d{7})$|^(0(?!4)\d{8})$/

这将匹配0后跟4,后跟8位数。

前瞻性的有趣之处在于它不会移动搜索光标:

0123456789
^ Cursor is here
 ^ Lookahead on this character
^ Cursor is still here