对于一项任务,我试图将一个电话号码按以下格式拆分为两部分:(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];
}
编辑:我已经开始工作了,谢谢大家的帮助。
如果你不必使用.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+)/
更改
document.getElementById("areaOutput").value = tokens1[0];
至
document.getElementById("areaOutput").value = tokens1[0].substr(1, 3);
上面的代码从tokens1[0]
中获取一个子字符串,从字符串的第一个字符开始,然后获取后面的三个字符(5、5和5)。
这里有一个使用单个.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()
的正则表达式,因此单个拆分可以拆分多个内容。
我建议使用match()
:
document.getElementById("areaOutput").value = tokens1[0].match(/d+/);