Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制电子邮件地址(国际域名)中UMLAUT的Laravel验证规则_Php_Regex_Laravel_Idn - Fatal编程技术网

Php 限制电子邮件地址(国际域名)中UMLAUT的Laravel验证规则

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 上述验证规

我需要限制在电子邮件地址中使用德语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中工作。