Php 限制电子邮件地址(国际域名)中UMLAUT的Laravel验证规则
我需要限制在电子邮件地址中使用德语umlauts(äÄöäÜ) 因此,我在我的Php 限制电子邮件地址(国际域名)中UMLAUT的Laravel验证规则,php,regex,laravel,idn,Php,Regex,Laravel,Idn,我需要限制在电子邮件地址中使用德语umlauts(äÄöäÜ) 因此,我在我的AppServiceProvider中快速创建了一个自定义验证规则: Validator::extend('without_umlauts', function ($attribute, $value) { return preg_match('/^[^äÄöÖüÜ]*$/u', $value); }); regex(请参阅)的工作方式似乎与预期的非常接近,并在基本字符串中检测给定的umlauts 上述验证规
AppServiceProvider
中快速创建了一个自定义验证规则:
Validator::extend('without_umlauts', function ($attribute, $value) {
return preg_match('/^[^äÄöÖüÜ]*$/u', $value);
});
regex(请参阅)的工作方式似乎与预期的非常接近,并在基本字符串中检测给定的umlauts
上述验证规则适用于输入字段type=“text”
和以下输入值:
täst@example.com
jane-doe@täst.com
但是,只要我使用type=“email”
,这个规则在谷歌浏览器中就不起作用了。
我认为这是因为在幕后,Laravel Google Chrome将电子邮件地址的域部分强制转换为IDNA ASCII:
jane-doe@xn--tst-qla.com
我已经尝试在$value
上使用,但没有成功
如何限制在电子邮件地址的域名中使用umlauts(特殊字符)?
在整个电子邮件地址字符串中不允许使用UMLAUT
更新:它在Firefox中运行良好。这似乎是一个与浏览器相关的问题(而不是Regex/Laravel)。Read。为什么不使用
input=text
,因为您对它进行了电子邮件验证?Laravel不会根据您在表单中使用的类型修改您的输入,Laravel知道并且无法知道表单中使用的输入类型,它只接受数据,很可能是您的浏览器及其type=“email”的实现
正在修改发送的值。@i--谢谢您的输入。我目前正在使用type=“text”
作为解决方法。我一直认为<代码>类型=“电子邮件”会帮助用户(内置表单验证,移动键盘上的不同键盘),但我会考虑远离这个输入类型。@ ReMul也感谢您的反馈。你是对的。这似乎是谷歌Chrome的一个问题。它在Firefox中工作。