我想要一个正则表达式,在以下示例中标记为正确的数字:
+256897845
+1 232321
+29 2343 2432 43
+555 2356897845
+1245 2356878
+918989784578
- 开始时必须包含+符号
- 可选支持多达 3 个空间 如: +29 2343 2432 43
- 最少 8 个字符,包括 + 符号
- 最大字符 18 位(3 个空格 + 4 位最大国家/地区代码 + 加号 (+( 符号 + 10 位最大数字(
我已经尝试了以下自我,但没有工作:
^+[0-9]?()[0-9](s|S)(d[0-9]{18})$
您可以使用
/^+(?=(?:s?d){7,17}$)d+(?:s?d+){0,3}$/
查看正则表达式演示
详
^
- 字符串的开头+
- 加号符号(?=(?:s?d){7,17}$)
- 直到字符串的末尾,必须出现 7 到 17 次可选的空格和一个数字d+
- 1+ 位数字(?:s?d+){0,3}
- 0 到 3 次可选空格和数字$
- 字符串结尾。
JS演示:
var strs = ['+256897845','+1 232321','+29 2343 2432 43','+555 2356897845','+1245 2356878','+918989784578'];
var rx = /^+(?=(?:s?d){7,17}$)d+(?:s?d+){0,3}$/;
for (var s of strs) {
console.log(s, "=>", rx.test(s));
}
尽管 Wiktor 的正则表达式完美地完成了这项工作,但我个人更喜欢保持正则表达式简单,因为在经常发生的正则表达式需求更改的情况下,它会更易于维护。
您可以编写这样的函数,这不仅可以处理任何地方存在的多个空格,还可以处理连字符(和其他特殊字符(,因为这在手机号码中也很常见,最后您可以简单地应用此正则表达式/^[+]\d{7,13}$/
在这里演示,
function isValidMobileNumber(number) {
if (number == null || number.trim().length == 0) {
return false;
}
number = number.replace(new RegExp('[ -]', 'g'), '');
var rx = /^[+]d{7,13}$/;
return rx.test(number);
}
var strs = ['+1-234-242-2434','+1-23-2','+123','+256897845','+1 232321','+29 2343 2432 43','+555 2356897845','+1245 2356878','+918989784578'];
for (var s of strs) {
console.log (s + " --> " + isValidMobileNumber(s));
}