> 백엔드 개발 > PHP 튜토리얼 > 这样理解正则对吗

这样理解正则对吗

WBOY
풀어 주다: 2016-06-23 13:23:18
원래의
842명이 탐색했습니다.

看到别人写的正则是如下:
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   .....
正则有问题 

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

操你妈,有问题

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿