欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

这样理解正则对吗

程序员文章站 2022-05-25 22:01:57
...
看到别人写的正则是如下:
if (!preg_match('/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/',$_string))
其中对于中括号及里面的理解,我是这样的:中括号表示其中任意一项;
那么,上面这段中的它[\w\-\.]我就理解成了前面第一个打头的 可以是所有任意英文字符,或是横杠,或是点都可以

如果上面的理解对,那么 问题来了,这段代码的作用是为了验证email的正确性。
大家知道email第一个打头的不能是横杠,这不就错了吗?


回复讨论(解决方案)

现在很多邮箱校验都是粗略校验,因为有的服务商确实支持诡异写法。我觉得宁可漏网,不要错抓,就好了,别让用户不能用。
附一个dropbox国外网站,email验证的源码:

$r = preg_match('/^[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+(\.[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.([A-Za-z]{2,})$/', $email);

现在很多邮箱校验都是粗略校验,因为有的服务商确实支持诡异写法。我觉得宁可漏网,不要错抓,就好了,别让用户不能用。
附一个dropbox国外网站,email验证的源码:

$r = preg_match('/^[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+(\.[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.([A-Za-z]{2,})$/', $email);

你二啊,文不对题!我问的是我的理解对吗,你个二货?

你的正则可以匹配 ...@....net
你说对吗?


现在很多邮箱校验都是粗略校验,因为有的服务商确实支持诡异写法。我觉得宁可漏网,不要错抓,就好了,别让用户不能用。
附一个dropbox国外网站,email验证的源码:

$r = preg_match('/^[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+(\.[A-Za-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.([A-Za-z]{2,})$/', $email);

你二啊,文不对题!我问的是我的理解对吗,你个二货?

你的态度,注定了你的发展。

\w 大小写英文字母,数字,下划线
这正则能匹配到 .@..__ _@_._ -@-.0 .....
正则有问题

理解没问题,态度有问题。

操你妈,有问题