2012-03-22 35 views
1

对于任务,我试图按以下格式拆分电话号码:(555)555-5555分成2部分。首先是应该显示“555”的区号,第二个是应该显示“555-5555”的剩余号码。JavaScript字符串拆分方法分隔符

我已经设法得到几乎完美的显示答案,除了区号显示为“(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]; 
} 

编辑:我得到它的工作,感谢大家的帮助。

+1

string.substr(1,string.length -1) – Bram 2012-03-22 21:42:58

回答

2

变化

document.getElementById("areaOutput").value = tokens1[0]; 

document.getElementById("areaOutput").value = tokens1[0].substr(1, 3); 

什么上面的代码的作用是从tokens1[0]抓斗一个子起始于字符串中的第一个字符,之后的三个字符敛(5,5 ,和5)。

+0

非常感谢你,它完美地工作。 – Envious 2012-03-22 21:48:17

+0

不客气。接受和upvote? =) – 2012-03-22 21:48:42

+1

我会在4分钟内接受答案(现在不会让我这样做)。 此外,我不能upvote。没有足够的代表。 – Envious 2012-03-22 21:51:18

1

我建议使用match()

document.getElementById("areaOutput").value = tokens1[0].match(/\d+/); 
+0

尽管这是一个很好的解决方案,但OP在这种情况下不需要使用Regex,因为他的输入将是一个静态数字。例如。数字的位置永远不会改变。 – 2012-03-22 21:45:48

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+)/ 
+0

为纯粹的正义性+1。 – 2012-03-22 21:51:28

+0

我必须使用.split来完成这项任务。这是要求的一部分。无论如何感谢 – Envious 2012-03-22 21:53:31

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()使用正则表达式,因此一个拆分可以拆分多个事物。

+0

与pure-regex解决方案不同,我实际上可以在这里阅读代码。 – Stoive 2012-03-23 02:26:48