Что не так с моим синтаксисом регулярных выражений JavaScript / regex? - PullRequest
3 голосов
/ 01 февраля 2012

Мне нужно регулярное выражение для использования с javascript / jquery, который соответствует этим правилам ...

  • будет содержать 10 цифр
  • если есть ведущий 1 или +1, его следует игнорировать
  • допустимые символы в поле: ... 0-9, () и -

Я нашел регулярное выражение в Snipplr (первое), но оно не работает. Прежде всего, я даже не уверен, соответствует ли это регулярное выражение моим правилам. Во-вторых, разрешающие входные данные, такие как &^%$$#%^adfafsd. Я считаю, что ошибка в моем коде, а не в регулярном выражении. Например, должны ли быть кавычки вокруг выражения?

Вот код, который должен проверять поле телефона ...

$('#phone').bind('blur', function() {
    var pattern = new RegExp("^(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$");
    if(pattern.test($('#phone').val())){
        $("#phone").addClass("error");
        return false;
    }else{
        $("#phone").removeClass("error");
        return true;
    }
    return true;
})

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

Когда вы не используете буквальную форму (/ [regex] /), вам нужно экранировать строку regex. Попробуйте вместо этого:

var regex = /^(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$/;

if(regex.test($('#phone').val()){ ... }
2 голосов
/ 01 февраля 2012

если есть ведущий 1 или +1, его следует игнорировать это будет включать 10 цифр допустимые символы в поле: ... 0-9, () и -

Это может быть сопоставлено с выражением вроде:

/^(?:\+?1)?[()-]*(?:\d[()-]*){10}$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...