对于作业,我正在尝试按以下格式分割电话号码:(555)555-5555分成两部分。第一个是区号,它应显示“555”,第二个是应显示“555-5555”的剩余号码。
我设法得到几乎完美的显示答案,除了区号显示为“(555)”而不是“555”,这是我需要的。
如何使分隔符查找括号之间的数字?
这是我目前的代码:
function splitButtonPressed()
{
var inputString = document.getElementById( "inputField" ).value; //Input field for numbers
var tokens1 = inputString.split( " " );
document.getElementById("areaOutput").value = tokens1[0];
document.getElementById("numberOutput").value = tokens1[1];
}
编辑:我已经开始工作,谢谢大家的帮助。
答案 0 :(得分:3)
如果您不必使用.split()
来解决此问题,并且您想为区号添加一堆不同的分隔符,我可能会使用正则表达式执行此操作:
var phoneStr = "(123) 456-7890";
var match = phoneStr.match(/\s*\(?(\d+)[)\-\s]\s*(\d+)[\s*\-](\d+)/);
// areaCode = match[1];
// prefix = match[2];
// num = match[3];
这是一个测试应用程序,显示它处理大量不同的电话号码:http://jsfiddle.net/jfriend00/L87rE/
以下是正则表达式的工作原理:
Any amount of whitespace \s*
An optional left paren \(?
A series of digits (captured for match[1]) (\d+)
Any one of several delimiters a right paren, a dash or whitespace [)\-\s]
Any amount of whitespace \s*
A series of digits (captured for match[2]) (\d+)
Whitespace or dash as a delimiter [\s*\-]
A series of digits (captured for match[3]) (\d+)/
答案 1 :(得分:2)
更改
document.getElementById("areaOutput").value = tokens1[0];
到
document.getElementById("areaOutput").value = tokens1[0].substr(1, 3);
上面的代码所做的是从字符串中的第一个字符开始抓取tokens1[0]
的子字符串,然后抓取三个字符(5,5和5)。
答案 2 :(得分:2)
这是一个使用单个.split()
的人,可以使用这些灵活的电话号码格式:
"(123) 456-7890",
"123-456-7890",
" (123)456-7890",
" 123 456 7890"
var phoneStr = "(123) 456-7890";
// precondition the phone number by removing parens and trimming extra whitespace
var str = phoneStr.replace(/[\(\)]/g, " ").replace(/^\s*|\s*$/g, "");
// split on either a dash or whitespace
var parts = str.split(/-|\s+/);
// areacode == parts[0]
// prefix == parts[1]
// num == parts[2]
此处的测试用例:http://jsfiddle.net/jfriend00/UUgXM/
要使.split()
操作以不同的格式生成一致的结果,它会使用几个.replace()
操作来预处理.split()
之前的输入。
这使用带有.split()
的正则表达式,因此单个拆分可以拆分多个。
答案 3 :(得分:1)
我建议使用match()
:
document.getElementById("areaOutput").value = tokens1[0].match(/\d+/);