提供数据: 050359554和0478770213
我正在搜索一个正则表达式,检查该号码是否以04开头。 如果从04开始,则应该跟随6,7,8或9和7位数字。 否则,如果它仅从0开始而没有4,则应该跟随8位数。
我目前的正则表达式就像
/^(04[6789]\d{7})$|^(0\d{8})$/
这个的问题是,当我输入数字0478770213时,它已经说明了它在047877021的输入中没问题。但事实并非如此。
答案 0 :(得分:2)
答案 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