一般的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 次
$:匹配輸入的結尾.
新聞熱點
疑難解答