Мне нужно ограничить использование немецких умлаутов (äÄöÖüÜ) в адресах электронной почты.
Поэтому я быстро создал собственное правило проверки в своем AppServiceProvider
:
Validator::extend('without_umlauts', function ($attribute, $value) {
return preg_match('/^[^äÄöÖüÜ]*$/u', $value);
});
Регулярное выражение (см. визуализация ), кажется, работает почти так же, как ожидалось, и обнаруживает указанные умлауты в строках basi c.
Приведенное выше правило проверки работает с полями ввода type="text"
и последующим вводом значения:
täst@example.com
jane-doe@täst.com
Однако в Google Chrome правило не работает, как только я использую type="email"
. Я предполагаю, что причина этого в том, что Laravel Google Chrome переводит доменную часть адреса электронной почты в IDNA ASCII:
jane-doe@xn--tst-qla.com
, которую я уже пытался использовать idn_to_utf8()
на $value
, но это не сработало.
Как я могу ограничить использование умлаутов (специальных символов) в доменном имени адреса электронной почты? Умлаутс не должен допускаться во всей строке адреса электронной почты.
Обновление: отлично работает в Firefox. Кажется, это проблема, связанная с браузером (вместо Regex / Laravel).