Подтверждает как номер телефона - PullRequest
1 голос
/ 22 января 2010

Я пытаюсь проверить строку как номер телефона (цифры и некоторые специальные символы). Отсюда я использовал существующий фрагмент кода: http://snippets.dzone.com/posts/show/597, что кажется правильным. Но каждый раз string.match(format) возвращает null, что приводит к отображению сообщения об ошибке.

var format = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/;
var string = jQuery(".validate_phone").val();
if (string.match(format) != true) {
  // some error message
}

Я уже проверял, string заполнено, что ожидаемое значение.

Следующие значения должны совпадать:
339-4248
339-42-48
339 42 48
339 4248
3394248
(095) 3394248
(095) 3394248
+7 (095) 3394248
+7 (095) 3394248
+7 (095) 3394248
+7 (095) 3394248

Все остальное должно отображать сообщение об ошибке.

Что не так с этим кодом? Заранее спасибо!

Обновление: вот контрольный пример http://labuschin.com/material/phone

Ответы [ 3 ]

3 голосов
/ 22 января 2010

Друг из Facebook успешно помог мне:

var format = /(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}/;  
var nr= prompt("Phone number", "");    
if (nr.match(format) == null) {
  alert ("incorrect");  
} else {  
  alert ("correct");  
} 

Изменил условие if и удалил ^ в начале и $ в конце. Работает здесь: http://labuschin.com/material/phone

0 голосов
/ 22 января 2010

Может быть ... вам не следует использовать "строку" в качестве имени переменной.

var format = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/;
var nr= prompt("Phone number", "");
if (!nr.match(format)) {
alert ("incorrect");
} else {
alert ("correct");
} 

у меня работает.

0 голосов
/ 22 января 2010

Допустимое регулярное выражение для этого будет: (\+\d\s*)?(\(\s*\d{3}\s*\)\s*)?\d{3}([- ]?\d{2}){2}.

Однако match() возвращает null в случае несоответствий и массив захваченных значений в совпадениях - он никогда не вернет true. Возможно, вас больше интересует search(), который возвращает позицию совпадения или -1, если регулярное выражение не совпадает. E.g.:

var format = /^(\+\d\s*)?(\(\s*\d{3}\s*\)\s*)?\d{3}([- ]?\d{2}){2}$/;
var string = jQuery(".validate_phone").val();
if (string.search(format) == -1) {
  // some error message
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...