Разделитель метода разделения строк JavaScript - PullRequest
1 голос
/ 23 марта 2012

Для назначения я пытаюсь разбить номер телефона в следующем формате: (555) 555-5555 на 2 части.Первый - это код города, который должен отображать «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];
}

РЕДАКТИРОВАТЬ: я получил его на работу, Спасибо за вашу помощь.

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

Если вам не нужно использовать .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+)/
2 голосов
/ 23 марта 2012

Вот один из них, использующий один .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(), поэтому одно разбиение может разделить несколько элементов.

2 голосов
/ 23 марта 2012

Измените

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

на

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

. Вышеприведенный код извлекает подстроку из tokens1[0], начиная с первого символа в строке и получая три символа послеэто (5, 5 и 5).

1 голос
/ 23 марта 2012

Я бы предложил использовать match():

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