正则表达式电话号码验证

时间:2012-11-28 11:01:07

标签: javascript regex vb.net

我为黎巴嫩电话号码写了这个正则表达式,基本上它应该以

开头 00961 +961 这是国际代码,然后区号

可以是 0 9 的任何数字,也可以是手机代码“70”“76”

“79”然后 6 数字完全

我编写了以下 reg ex ,但没有6位数部分:

^(([0][0]|[+])([9][6][1])([0-9]{1}|[7][0]|[7][1]|[7][6]|[7][8]))$

当我想添加代码以确保表达式只允许6位数时:

^(([0][0]|[+])([9][6][1])([0-9]{1}|[7][0]|[7][1]|[7][6]|[7][8])([0-9]{6}))$

似乎接受5位或6位数字而不是6位数字

我很难找到什么错误

5 个答案:

答案 0 :(得分:2)

使用此正则表达式((00)|(\+))961((\d)|(7[0168]))\d{6}

答案 1 :(得分:1)

这就是我要用的。

/^(00|\+)961(\d|7[069])\d{6}$/
  • 00或+
  • 961
  • 一位数字或70或76或79
  • 一个6位数字

答案 2 :(得分:1)

[0-9]{1}也将匹配7x的手机代码,因为7介于0和9之间。这意味着“5位蜂窝号码”将匹配7位数和6位数。

答案 3 :(得分:0)

尝试

 /^(00961|\+961)([0-9]|70|76|79)\d{6}$/.test( phonenumber );
//^                                    start of string
// ^^^^^^^^^^^^^                       00961 or +0961
//              ^^^^^^^^^^^^^^^^       a digit 0 to 9 or 70 or 76 or 79
//                              ^^^^^  6 digits
//                                   ^ end of string

答案 4 :(得分:0)

酒窖代码正在形成一个陷阱,正如@ellak指出的那样:

/^((00)|(\+))961((\d)|(7[0168]))\d{6}$/.test("009617612345"); // true

这里的代码应该像这样打破:00 961 76 12345

但RegEx实际上违反了这个:00 961 7 612345,因为7\d中匹配,其余的组合在一起,恰好是6位数,并且匹配。

我不确定这是否真的有效,但我想这不是你想要的,否则问题中的RegEx应该有效。

这是一个有点长的RegEx,可以避免陷阱:

/^(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})$/

一些测试结果:

/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009617012345")
  false
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009618012345")
  true
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009617612345")
  false
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("0096176123456")
  true