Проблема регулярного выражения - PullRequest
1 голос
/ 10 июля 2009

У меня есть следующее регулярное выражение в окне проверки электронной почты asp.net:

([a-zA-Z0-9_\-\.]+)\@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))

Это регулярное выражение работает только для

xxx@base.co.uk
xxx@base.com
xxx@group.com

Не работает для:

xxx@arg.co.uk
xxx@arggroup.com

Пожалуйста, помогите мне

Ответы [ 3 ]

10 голосов
/ 10 июля 2009

Это:

[a-zA-Z0-9_-.]

содержит фиктивный диапазон, подчеркивание до точки. Вы имели в виду «подчеркивание, тире или точка», как это:

[a-zA-Z0-9_\-.]

? Как только я это исправлю, у меня все заработает.

Вы также должны использовать \. вместо . в адресах - точка соответствует любому символу, поэтому вы сопоставите baseXcom с вашим шаблоном. (Обратите внимание, что вам не нужен обратный слеш для точек в пределах [] с.)

Полное исправленное выражение:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))"

(обратите внимание, что я использую @"", чтобы избежать обратной косой черты.)

6 голосов
/ 10 июля 2009

Хотя я не дошел до точной проблемы, Вы упустили / упустили важный момент здесь. : -)

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

для соответствия '.' использовать

\.

давайте попробуем это

([a-zA-Z0-9_\-.]+)@(base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com)
0 голосов
/ 10 июля 2009

Использование тестера регулярных выражений здесь , вероятно, поможет вам. Однако, насколько я вижу, в регулярном выражении есть ошибка, которая не позволяет ему работать с any примеров: группа должна быть:

[-a-zA-Z0-9_.]

С этим исправлением он работает со всеми вашими примерами. Наличие - между _ и . пытается создать диапазон, но значения ASCII находятся в неправильном порядке.

Также точка, используемая в конечной части, должна быть экранирована как base\.com, а не base.com

...