Начиная с Firefox 4, регулярное выражение выдает ошибку «Слишком сложное регулярное выражение» - PullRequest
1 голос
/ 05 августа 2011

У меня есть следующий валидатор адреса электронной почты, который не будет оценивать и выдает вышеуказанную ошибку, когда строка для оценки достигает определенной длины:

^([\w\-]+)([\.\w\-\+]+)*@([\w\-]+\.){1,5}([A-Za-z]){2,4}$

Воспроизвести легко.Перетащите регулярное выражение в http://regexpal.com/ вместе с длинным адресом электронной почты, таким как juicy.cakeballs2@cheeze-party.poonalicious.com

. Проблема связана с Firefox 4 +

Может кто-нибудь предложить, возможно, способ упроститьрегулярное выражение или какой-то другой способ решения проблемы?

Это разрывает меня на части, Лиза!

1 Ответ

5 голосов
/ 05 августа 2011

Проблема с перекрывающимися классами.[ab]+[abc]+ может соответствовать «ababababc» несколькими различными способами.Чтобы уменьшить откат, вместо этого измените его на [ab]+(c[ab]*)*.(Я знаю, что переделанное выражение не совпадает точно с теми же строками, что и исходное выражение. Слишком лениво, чтобы опубликовать подходящий пример. Google "regex backtracking", нет, покупайте и читайте Friedl, сейчас).

Для записи, формы, которые хотят «проверить» мой адрес электронной почты в JavaScript, в большинстве случаев терпят неудачу.Я не могу сосчитать, сколько раз мне пришлось создавать временный адрес электронной почты только для того, чтобы совершить покупку или подписку.Единственный надежный способ подтвердить адрес электронной почты - попытаться отправить письмо.Пожалуйста, не создавайте еще одну неработающую форму "validator".

Некоторые примеры адресов, которые являются технически действительными:

*@example.com
me@had.to.create.a.temp.address.again.i.run.my.own.dns.example.net
you.forgot@domain.example.museum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...