Laravel правило проверки для ограничения умлаутов в адресах электронной почты (международные доменные имена) - PullRequest
2 голосов
/ 12 марта 2020

Мне нужно ограничить использование немецких умлаутов (äÄöÖüÜ) в адресах электронной почты.

Поэтому я быстро создал собственное правило проверки в своем 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).

...