Safari не справляется с regexp'ами при проверке e-mail-адресов

Казалось бы, проблема проверки корректности заполнения поля с адресом электронной почты в форме браузера описана в Интернете 100500 раз. В синтаксесе GWT решение может выглядеть так:

private final static String EMAIL_VALIDATION_REGEX    = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";

 public static boolean validateEmail(String email) {
  return email.matches(EMAIL_VALIDATION_REGEX); 
 } 


Казалось бы, в чем подвох? Да ни в чем, все браузеры, включая допотопный IE6, справляются с этой процедурой успешно. И Safari справляется, но только… в версии для Windows. А вот Safari, входящий в состав iPad, обрабатывает регулярное выражение некорректно и отбраковывает вполне адекватные e-mail'ы. Можно было бы, конечно, выбрать регэксп попроще, благо в Интернете вариантов немеряно, вплоть до

/\S@\S/.test(email)


да вот только где гарантия, что простое выражение окажется яблочному браузеру «по зубам»? Ведь в процессе гугления выяснилось, что с проблемой обработки regexp'ов в Safari столкнулся не только я. Так что пришлось излагать валидацию e-mail другими словами:


 public static boolean validateEmail(String email) {
  int at  = email.indexOf('@'); 	 
  int dot = email.lastIndexOf('.'); 	 
  int spc = email.indexOf(' '); 	 
  return at > 1 && dot > at && spc < 0;	 
 } 


От опечаток вполне убережет. Но «война браузеров» задолбала .

Комментарии (3)

RSS свернуть / развернуть
+
0
Индусы видать софт для apple делают, китайцы производят.
avatar

Sergei_T

  • 11 мая 2012, 12:03
+
0
Актуально только для Safari или весь webkit-зоопарк этим страдает?
avatar

illuthion

  • 13 мая 2012, 21:01
+
0
Вот в том-то и дело, что глюк характерен только для Safari, установленного на iPad. Safari для Windows обрабатывает этот код нормально, как и прочие браузеры.
avatar

yababay

  • 13 мая 2012, 21:52

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.