首页 > 解决方案 > 正则表达式支持免费电话号码以及阿联酋号码

问题描述

我有一个验证阿联酋数字的正则表达式,例如:00971585045336 这是正则表达式: /00971(?:50|51|52|53|54|55|56|57|58|59|2|3|4|6|7|9)\d{7}$/

我需要添加对免费电话号码的支持,例如: 00971800382499530097180022988

我不擅长正则表达式,所以我需要帮助才能使它成为可能。提前致谢。

标签: javascriptregexvalidation

解决方案


您可以使用以下正则表达式,假设免工具号码格式为 00971800,后跟 5 位或 8 位数字。您的原始正则表达式已使用字符类进行了简化。测试显示 4 个有效数字,然后是无效数字:

const regex = /^00971((5\d|[234679])\d{7}|800(\d{5}|\d{8}))$/;
[
  '00971581234567',
  '0097171234567',
  '0097180012345',
  '0097180012345678',
  '0097158123456',
  '009715812345678',
  '009717123456',
  '00971712345678',
  '00971800123456',
  '009718001234567',
].forEach((str) => {
  let valid = regex.test(str);
  console.log(str + ' ==> ' + valid);
});

输出:

00971581234567 ==> true
0097171234567 ==> true
0097180012345 ==> true
0097180012345678 ==> true
0097158123456 ==> false
009715812345678 ==> false
009717123456 ==> false
00971712345678 ==> false
00971800123456 ==> false
009718001234567 ==> false

解释:

  • ^- 字符串的开始
  • 00971- 期望文字
  • (- 起始组,用于逻辑或
    • (- 起始组,用于逻辑或
      • 5\d- 期望 a 5,后跟一个数字
      • |- 或者
      • [234679]- 具有允许数字的单个字符的字符类
    • )- 小组结束
    • \d{7}- 7 位数
    • |- 或者
    • 800- 文字文本
    • (- 起始组,用于逻辑或
      • \d{5}- 5 位数
      • |- 或者
      • \d{8}- 8 位数字
    • )- 小组结束
  • )- 小组结束
  • $- 字符串结束

推荐阅读