2010-12-21 2 views
1

У меня есть регулярное выражение для электронной почты. Я доволен, позвольте называть его EMAIL. Так что мое поле валидатор выглядит следующим образомразделенное запятой regex

var regex=/^EMAIL$/ 

Но теперь капитан говорит мне, что он хочет, чтобы разделенные запятой сообщения электронной почты в поле.

Что первым приходит на ум, это что-то вроде

/^(EMAIL)?(, EMAIL)*$/ 

но повторяет EMAIL, которая уже оскорбляет мои чувства. Есть ли способ написать это регулярное выражение, не повторяя EMAIL?

+0

Какое использование имеет это регулярное выражение? (с уважением к капитану) –

+0

Я не уверен, что знаю, что вы имеете в виду. Его для проверки html-поля с javascript – Matt

+0

Но как он может быть эффективным? Разве вы не хотите EMAIL = xxx, EMAIL = yyy? Потому что я не вижу интереса к EMAIL [, EMAIL] * –

ответ

3

Это охватывает все примеры упоминалось

^(EMAIL(,\s|$))+$ 

Это соответствует

EMAIL 
EMAIL, EMAIL 

б у не

EMAILEMAIL 
+0

huzzah! Я знал, что это должно быть выполнимо. – Matt

3

Разделить значение по запятой, а затем использовать регулярное выражение на каждом из них.

2

Не могу придумать способ сопоставить список адресов электронной почты как есть, не повторяя EMAIL. Вот простой обходной путь:

/^(EMAIL,)+$/.test(emailList + ", ");

Пример:

var s = "abc, def, ghi, jkl"; 
/^([a-z]+,)+$/.test(s + ", "); 
+0

Это то, что я буду использовать сейчас, но мой смысл паука продолжает говорить мне, что есть способ выразить это в regex без копирования/вставки – Matt

+0

Разделение по запятой (при необходимости, обрезка каждого из них, если необходимо) и тестирование также является хорошим вариантом, как предлагается @ck. – dheerosaur

1

Джейсона кажется самым простым, но для чего это стоит, вы можете также использовать backreferences: ^EMAIL, EMAIL$ будет таким же, как ^(EMAIL), \1$.

+1

'\ 1' не применяет подвыражение в группе # 1 снова, оно пытается сопоставить одну и ту же группу # 1, совпадающую в первый раз. Таким образом, ваш подход будет соответствовать '[email protected], me @ here.com', но не' [email protected], you @ there.com'. –

+0

Спасибо за подсказку; вы, вероятно, спасли мне несколько часов смущенного регулярного выражения, отлаживающего дорогу. Кроме того, Watchmen был потрясающим. – sdleihssirhc

Смежные вопросы