php email正则表达式详解
一般的email,形如zhangshan@163.com,abc@sina.com.cn这样一些常用的形式就行了,但是在我们公司的一些客户中邮箱却有一些zhangshna.Mr@163.com,abc_Wang.dd@sian.com,abc_Wang.dd.cc@sian.com这 种类似的形式,在@符号之前还有点.,原来是拿来就用,可是现在就不行,得自己研究正则的用法了
朋友们,如有正则表达式方面的问题,欢迎在此留言交流讨论!
原来的正则表达式
代码如下 | 复制代码 |
/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/; |
我根据我的实际情况修改后的正则表达式
代码如下 | 复制代码 |
/^(w)+(.w+)*@(w)+((.w{2,3}){1,3})$/; 或者 /^(w)+(.w+)*@(w)+((.w+)+)$/; |
首先从命名下手,以@划分:
(1)左边email前缀 ——字母、数字、下划线、点和减号(只能以数字和字母开头结尾)
(2) 右边域名规则 ——字母、数字和减号(只能以数字和字母开头结尾,并且不能超过63个字符)
好了规则有了,剩下的就是匹配了,希望能尽量做到不放过一个“坏人”:
代码如下 | 复制代码 |
左边[a-zd]([a-zd_.-]*[a-zd])* @ ([a-zd][a-zd-]{0,61}[a-zd].){1,3}[a-z]{2,6}([.][a-z]{2,3})?右边 拼起来加上^$i:/^[a-z0-9]([a-z0-9-_.]*[a-z0-9])*@([a-z0-9][a-z0-9-]{0,61}[a-z0-9].){1,3}[a-z]{2,6}([.][a-z]{2,6})?$/i |
我用PHP试了一下效果还不错,就是在sql语句中用时还是会有些问题,不过已经基本满足我的要求了
字符描述:
^ :匹配输入的开始位置。
:将下一个字符标记为特殊字符或字面值。
* :匹配前一个字符零次或几次。
+ :匹配前一个字符一次或多次。
(pattern) 与模式匹配并记住匹配。
x|y:匹配 x 或 y。
[a-z] :表示某个范围内的字符。与指定区间内的任何字符匹配。
w :与任何单词字符匹配,包括下划线。
{n,m} 最少匹配 n 次且最多匹配 m 次
$ :匹配输入的结尾。
补充:Php教程,Php常用代码