2010-08-19 3 views
0

У меня есть проблема с регулярным выражением, с которой мне нужна помощь. Он пытается проверить адрес электронной почты.Проблема с Regex: метод IsMatch никогда не возвращается

Regex rx = new Regex(@"^[A-Za-z0-9]([_\.\-]?[A-Za-z0-9]+)*\@[A-Za-z0-9]([_\.\-]?[A-Za-z0-9]+)*\.[A-Za-z0-9]([_\.\-]?[A-Za-z0-9]+)*$|^$"); 
rx.IsMatch("john.gilbert.stu.seattle.washington.us"); 

IsMatch метод никогда не возвращает для этой конкретной строки. Он переходит в бесконечный цикл. Кто-нибудь может понять, в чем проблема с шаблоном.

Спасибо!

+0

не уверен, что это за ошибка. Я всегда создаю регулярные выражения с помощью онлайн-тестера регулярных выражений, например http://www.fileformat.info/tool/regex.htm Я думаю, что это очень быстрый подход TDD для создания регулярных выражений. (PS Есть еще много таких, просто google) – Albert

+0

Он возвращается, только очень медленно. –

+0

Я пробовал несколько онлайн-тестировщиков регулярных выражений, и они очень быстро возвращают результат «без соответствия». Его просто C# Regex, который возвращается после долгого времени. –

ответ

0

Первый «+» является проблемой, если вы его удалите, он работает

+0

Удивительный! Спасибо Квинну. –

+0

Собственно, плюсовые знаки прекрасны - на самом деле вам нужно больше их. Это вопросительные знаки, которые не принадлежат. '^ [A-Za-z0-9] + ([_.-] [A-Za-z0-9] +) * @ [A-Za-z0-9] + ([_.-] [A- Za-z0-9] +) * $ ' –

0

Я бы порекомендовал вам следующее, чтобы подтвердить адрес электронной почты:

try 
{ 
    MailAddress addr = new MailAddress("[email protected]"); 
} 
catch (FormatException exc) 
{ 
    // The email address is not valid 
} 

Вот interesting read.

+0

Хотелось бы, чтобы я мог это сделать. На самом деле регулярное выражение находится в файле XSD, который используется для проверки больших XML-документов. Чтобы изолировать мою проблему, я просто принял участие в этой проблеме и написал этот метод быстрой проверки выше. –

+0

+1 для интересного чтения, -1 для предположения об использовании исключений в не исключительном случае. – jloubert

+0

@jloubert Как вы знаете, что это не исключение? Если это обстоятельство было методом, который, как ожидается, отправит почту на адрес, пройденный, то он является исключительным, поскольку в этой точке нет возможного способа добиться успеха. –

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