Регулярное выражение проверки телефона с исключением для TEXT и TEXTTWO

В настоящее время я использую механизм проверки jQuery с jQuery 1.10. Заглянув в сам скрипт проверки (который для телефонных номеров является пользовательским типом), я заметил, что он использует следующее регулярное выражение:

/^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/

То, что я пытаюсь сделать, это также разрешить "TEXT" и "TEXTTWO" в качестве допустимых значений. Я пытался:

/^?(TEXT|TEXTTWO)^?([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/

...и несколько вариаций на тему безуспешно.


person sacredfaith    schedule 29.05.2013    source источник


Ответы (2)


Молодец, что пытаешься! Но, похоже, вы неправильно понимаете одну вещь: ^ – это якорь, который соответствует началу строки; его нельзя определить количественно, например, сделать необязательным через ?, и он не имеет смысл появляться после того, как какая-то часть строки уже совпала, так как тогда она точно не может быть началом строки. Попробуйте это вместо этого:

/^TEXT|TEXTTWO|([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/

Итак, у вас была правильная идея с чередованием (|). Обратите внимание, что чередование имеет один из самых низких приоритетов среди всех операторов в регулярном выражении, поэтому группировка здесь не требуется.

person slackwing    schedule 29.05.2013
comment
Вау, я ЗНАЛ, что был близок с | селектор! Это имеет смысл (оглядываясь назад), и я чувствую, что понимаю регулярное выражение лучше. Спасибо большое! - person sacredfaith; 30.05.2013

Как насчет этого:

/^(TEXT|TEXTTWO|([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?)$/
person mart1n    schedule 29.05.2013