Regex UAE电话号码正则表达式

Regex UAE电话号码正则表达式,regex,Regex,我正在为阿联酋数字构建一个正则表达式。我设法运行了几个案例,但有些案例并没有验证所有的案例 这是我想到的 验证表达式下面以:00971或+971开头的数字可以正常工作 /^((\+971|00971){1}(2|3|4|6|7|9|50|51|52|55|56){1}([0-9]{7}))$/ e、 g.00971551234567 现在,为了验证以不带00971或+971开头的数字,我将下面的表达式与上面的表达式组合起来: /^((050|051|052|055|056){1}([0-9]{

我正在为阿联酋数字构建一个正则表达式。我设法运行了几个案例,但有些案例并没有验证所有的案例

这是我想到的

验证表达式下面以:00971或+971开头的数字可以正常工作

/^((\+971|00971){1}(2|3|4|6|7|9|50|51|52|55|56){1}([0-9]{7}))$/
e、 g.
00971551234567

现在,为了验证以不带
00971
+971
开头的数字,我将下面的表达式与上面的表达式组合起来:

/^((050|051|052|055|056){1}([0-9]{7}))$/
e、 g.
0551234567

问题 不知何故,下面的表达式无法验证041234567这样的电话号码

/^((02|03|04|06|07|09){1}([0-9]{7}))$/
我尝试将所有的表达式组合到一个表达式中,但它不起作用,然后我意识到只有上面的表达式不起作用

         [Country][area][7 digit number]
Pattern: +971 55 1234567
表达式应接受以下数字:

  • 00971551234567
  • +971551234567
  • +97141234567
  • 0551234567
  • 041234567

我怎样才能让我的正则表达式工作?

看起来你想要这样的东西

^(?:\+971|00971|0)?(?:50|51|52|55|56|2|3|4|6|7|9)\d{7}$



我不知道阿联酋的数字格式,但根据您的示例,我得出了以下结论:

^(?:\+971|0(0971)?)(?:[234679]|5[01256])[0-9]{7}$

你能为匹配的字符串提供一些示例吗?我刚刚编辑了我的问题。你的“问题”表达式适用于示例电话号码。表达式的长度是多少,或者[Country]和[area]是可选的?你在使用什么语言?看起来我迟到了。。。但是我的正则表达式使country或
0
前缀成为强制性的,所以我现在保留这个答案,使用它来代替,以防止使用回溯,并将其缩短一点:
^(?:+971 | 0(0971)?(?:[234679]| 5[01256])\d{7}$
@Unihedron确实,这更好。。。我犯了复制/粘贴OP的正则表达式而没有考虑太多的错误。但是我仍然会使用
[0-9]
而不是
\d
,以防有人试图在JS以外的其他地方使用这个正则表达式。甚至我的表达式也可以在regex101.com上使用。话虽如此,即使您的正则表达式也在验证Javascript中除041234567之外的所有模式。value.match(/^(?:\+971 | 00971 | 0)(?:50 | 51 | 52 | 55 | 56 | 2 | 3 | 4 | 6 | 7 | 9){7}$/)返回false。你没有领会我的意思。我在问题中提到的正则表达式也适用于regex101.com。检查我之前的评论:-/^(?:+971 | 00971 | 0)(?:2 | 3 | 4 | 6 | 7 | 9 | 50 | 51 | 52 | 55 | 56)[0-9]{7}$/。在我的情况下,测试(“041234567”)返回false。其余的都是真的。(/^(?:\+971 | 00971 | 0)?(?:50 | 51 | 52 | 55 | 56 | 2 | 3 | 4 | 6 | 7 | 9)d{7}$/)。jquery validator中的测试(值)返回false.OMG,我返回true。请检查您输入的位数。我会将您的答案标记为已接受
> "041234567".match(/^(?:\+971|00971|0)?(?:50|51|52|55|56|2|3|4|6|7|9)\d{7}$/m); 
[ '041234567',
  index: 0,
  input: '041234567' ]
^(?:\+971|0(0971)?)(?:[234679]|5[01256])[0-9]{7}$