我有一份电话号码列表,其格式多种多样,例如:(212)-555-1234
或 212-555-1234
或 2125551234
。
使用 JavaScript,从这些字符串中提取区号的最佳方法是什么?
我有一份电话号码列表,其格式多种多样,例如:(212)-555-1234
或 212-555-1234
或 2125551234
。
使用 JavaScript,从这些字符串中提取区号的最佳方法是什么?
首先,去掉所有不是数字的字符,得到纯数字。然后,通过切片获取前三个数字:
return myString.replace(/\D/g,'').substr(0, 3);
获取前3个连续数字的方法是...
/[0-9]{3}/.exec("(212)-555-1234")[0]
示例(演示):
console.log(/[0-9]{3}/.exec("(212)-555-1234")[0]); // 212
console.log(/[0-9]{3}/.exec("212-555-1234")[0]); // 212
console.log(/[0-9]{3}/.exec("2125551234")[0]); // 212
parsePhone("12025550104");
result: { countryCode:1, areaCode:202, number:5550104, countryISOCode:"US" }
正则表达式'^\(*(\d{3})'
应该可以解决问题。从匹配中获取第一组。
这里的^
将从开头开始匹配,\d{3}
将匹配3个数字。\(*
将匹配可选的起始括号。您不需要关心区号后面的下一个数字或符号。
\\d
而不是\d
,它将无法匹配这些字符串的任何部分。即使修复了这个问题,它仍然会匹配555
和123
。 - DeanOC^
从开头匹配。语法可能有一些问题,但在概念上,它只会匹配前三个数字。 - Yogendra Singh(212)-555-1234
时,这个正则表达式是不正确的,因为它包括了开括号在内的匹配。 - DeanOC取一个10位数的前三个数字,或者以1开头的11位数中的第一个1后面的前三个数字。这假设您的域是美国电话号码。