У меня есть регулярное выражение, которое я использую для проверки адресов электронной почты. Мне нравится это регулярное выражение, потому что оно довольно расслабляющее и доказало свою эффективность.
Вот регулярное выражение:
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@[^\.][\w\.\-]+\.[A-Za-z]{2,}>?
Ладно, отлично, в основном все разумно действительные адреса электронной почты, которые вы можете набросить, будут проверены. Я знаю, что, может быть, даже некоторые из них потерпят неудачу, но это нормально для моего конкретного варианта использования.
Теперь случается, что joe@x.com не проверяет. И угадайте, что x.com на самом деле является доменным именем, которое существует (принадлежит paypall).
Просмотр части регулярного выражения, которая проверяет доменное имя:
@[^\.][\w\.\-]+
Похоже, это должно быть в состоянии проанализировать доменное имя x.com , но это не так. Виновником является часть, которая проверяет, что доменное имя не может начинаться с точки (например, test @ .test.com)
@[^\.]
Если я удаляю часть [^.] Моего регулярного выражения, домен x.com проверяет, но теперь регулярное выражение разрешает имена доменов, начинающиеся с точки, например .test.com; это немного слишком расслабься для меня; -)
Таким образом, мой вопрос заключается в том, как часть списка отрицательных символов может повлиять на мою проверку одного символа, в основном то, как я читаю регулярное выражение: «убедитесь, что эта строка не начинается с точки», но, очевидно, она делает больше.
Буду признателен за любую помощь.
С уважением,
Waseem