手机号码和电话号码的正则表达式

Regular expression for mobilenumber and phonenumber

提供数据: 050359554 和 0478770213

我正在寻找一个正则表达式来检查数字是否以 04 开头。 如果它以 04 开头,那么它后面应该跟一个 6、7、8 或 9 和 7 数字。 否则,如果它仅以 0 开头而没有 4,则应后跟 8 位数字。

我当前的正则表达式就像

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

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

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

在你的期望中你说:

Otherwise if it starts with only a 0 and no 4 it should be followed by 8 digits.

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

你的正则表达式应该是:

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

但是有些事情让我感到不安,9位数字10位数字phone是合法的吗? 我发誓这是一个错误,所以我建议你:

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

您可以使用负前瞻:

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

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

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

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

您可以使用这个正则表达式:

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

RegEx Demo