4

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

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

可以是从09的任何数字或蜂窝代码“70”“76”

"79"然后是一个6数字

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

^(([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 位数字

我很难找到问题所在

4

6 回答 6

2

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

于 2012-11-28T11:05:30.673 回答
1

这就是我会使用的。

/^(00|\+)961(\d|7[069])\d{6}$/
  • 00 或 +
  • 961
  • 1 位数字或 70 或 76 或 79
  • 一个 6 位数字
于 2012-11-28T11:06:05.887 回答
1

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

于 2012-11-28T11:06:29.990 回答
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 应该可以工作。

这是一个避免陷阱的有点长的正则表达式:

/^(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
于 2012-11-29T05:24:17.197 回答
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
于 2012-11-28T11:12:11.423 回答
0

就在最近,黎巴嫩电信部更改了 IMS 上的区号。所以当前的正则表达式匹配器变为:

^(00|\+)961[ -]?(2[1245789]|7[0168]|8[16]|\d)[ -]?\d{6}$
  • 前缀:00+
  • 国家代码:961
  • 区号:1位或2位;包括2 *、7 *、8 *...,或旧 IMS 网络上以0 *开头的 Ogero 号码的单个数字,最后是以03开头的旧移动线路。
  • 6位数字

the961.com上的新闻

于 2021-08-17T14:35:58.313 回答