电话号码的正则表达式,包括国家/地区代码,最多 18 个字符



我想要一个正则表达式,在以下示例中标记为正确的数字:

+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));
}

相关内容

最新更新