2012-03-22 59 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