【问题标题】:Regex to support toll free numbers along with UAE numbers正则表达式支持免费电话号码以及阿联酋号码
【发布时间】:2021-05-17 11:14:40
【问题描述】:
我有一个验证阿联酋数字的正则表达式,例如:00971585045336
这是正则表达式:
/00971(?:50|51|52|53|54|55|56|57|58|59|2|3|4|6|7|9)\d{7}$/
我需要添加对免费电话号码的支持,例如:
0097180038249953 或 0097180022988
我不擅长正则表达式,所以我需要帮助才能使它成为可能。
提前致谢。
【问题讨论】:
标签:
javascript
regex
validation
【解决方案1】:
您可以使用以下正则表达式,假设免工具号码格式为 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 - 期望 5,后跟一个数字
-
| - 或
-
[234679] - 具有允许数字的单个字符的字符类
-
) - 组结束
-
\d{7} - 7 位数字
-
| - 或
-
800 - 文字文本
-
( - 起始组,用于逻辑或
-
\d{5} - 5 位数字
-
| - 或
-
\d{8} - 8 位数字
-
) - 组结束
-
) - 组结束
-
$ - 字符串结束