2012-05-04 4 views
0

Я создал reg Exp, который в основном позволяет использовать все форматы, которые мне нравятся. Тем не менее, все еще есть небольшая проблема с() ...Проверка правильности Regex

^\(?(\+?\d+)?\)? ?\d*(-?\d{2,3} ?){0,4}$ 

Это было бы справедливо: (+ 356-123 456 78, однако это не должно .... то же самое для +356) - 123 456 78.

Кто-нибудь знает, как убедиться, что шаблон содержит оба() или нет?

+0

http://stackoverflow.com/questions/9370903/java-regex-replacing-a-phone-number-including-optional-parentheses – Marc

ответ

2

Попробуйте это:

^(?:\((\+?\d+)?\)|\+?\d+) ?\d*(-?\d{2,3} ?){0,4}$ 

Это позволяет код зоны либо иметь код региона с скобкой или без.

+0

Спасибо, это я искал! – Jeffrey

3

Во-первых, обратите внимание, что вы не можете написать регулярное выражение, которое проверяет наличие сбалансированных круглых скобок. Если вы хотите разрешить только одну пару круглых скобок, вы можете создать регулярное выражение, чтобы убедиться, что они либо присутствуют, либо нет. Но если вы хотите разрешить любое количество круглых скобок, но только в парах, регулярное выражение недостаточно мощно для выполнения задания; вам нужен фактический парсер.

Лично я бы просто снял номер телефона, кроме цифр, пробелов и знака +. Это международная нотация, рекомендованная стандартом МСЭ-Т E.123, и устраняет необходимость беспокоиться о круглых скобках.

+1

+1 Прослушайте человек. – rjz

+0

Вы можете сделать это с помощью обратных ссылок и т. Д., Но стоит ли все проблемы? – siride

+0

* «Вы не можете написать регулярное выражение, которое проверяет сбалансированные круглые скобки» * - например. '\ ((? R) * \)' – Qtax

0

Самый простой способ справиться с этим - снять ненулевые числа и нормализовать пробелы в полях номеров телефонов. Люди десять набирают много и глупых форматов для полей телефонных номеров. Я хотел бы предложить процесс 2 шага:

// Strip non-numbers and whitespace 
var cleanPhone = phoneNumber.replace(/[^0-9\s]/, ""); 

// All whitespace are now single spaces 
cleanPhone = cleanPhone.replace(/\s+/, " "); 

if(cleanPhone.match(/* place your (now simple) validation regex here */)) { 
    // Valid! 
} 
Смежные вопросы