拿郵箱驗(yàn)證來(lái)說(shuō),網(wǎng)上絕大部分人寫(xiě)的郵箱驗(yàn)證正則表達(dá)式代碼都不能驗(yàn)證這郵箱:
i@julying.com,也不能驗(yàn)證 xxxxxx@i.com 。
上次我發(fā)現(xiàn)youku.com(優(yōu)酷網(wǎng))用戶注冊(cè)就有這個(gè)問(wèn)題,見(jiàn)圖:
|
|
|
|
|
|
|
|
|
今天發(fā)現(xiàn) QQ微信 也同樣有這個(gè)問(wèn)題:
|
|
|
|
|
|
|
|
|
他們都不能驗(yàn)證一個(gè)字母的域名或一個(gè)字母的用戶名。
我認(rèn)為,他們絕不是故意不讓這樣的用戶注冊(cè),而是這樣:
很久之前,最初寫(xiě)正則的程序員偷懶了,沒(méi)有寫(xiě) 這樣情況的正則表達(dá)式驗(yàn)證,
他當(dāng)時(shí)可能覺(jué)得這樣的正則比較麻煩,而且可能這樣的郵箱實(shí)在太少了,
沒(méi)有聽(tīng)說(shuō)一個(gè)字母的頂級(jí)域名提供郵箱服務(wù),也沒(méi)有見(jiàn)那個(gè)郵箱的用戶名是一個(gè)字母的,于是就沒(méi)寫(xiě)。
而后來(lái)的程序員就一直沿用這個(gè)代碼。。。。。
——————-
因?yàn)槌绦虿荒芴幚砦恢妙?lèi)型的數(shù)據(jù),比如 2003年網(wǎng)絡(luò)大面積爆發(fā) SQL 注入,就是一個(gè)經(jīng)典案例。
正如比爾蓋茨前輩說(shuō):用戶的所有輸入都是有害的,程序員要盡可能的驗(yàn)證所有可能性,否則,漏掉的可能性就是一個(gè)潛在的危機(jī)。
——————-
我順便寫(xiě)一個(gè)完整的郵箱驗(yàn)證正則表達(dá)式吧,以后不要搞這種錯(cuò)誤,讓人很郁悶。。
PHP 郵箱驗(yàn)證正則表達(dá)式:
preg_match(“/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i”,$email );
如果需要更加完善、嚴(yán)格的驗(yàn)證,修改這個(gè)正則表達(dá)式即可。
PHP 郵箱驗(yàn)證正則表達(dá)式 新手實(shí)例:
function isEmail($email){
if(preg_match(“/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i”,$email )){
return ‘是郵箱’;
} else{
return ‘不是郵箱’;
}
}
?>
——————————————————————————–
Javascript(js) 郵箱驗(yàn)證正則表達(dá)式:
myreg = /^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;
這個(gè)可以驗(yàn)證 形如:i@julying.com ,i@i.com 這種郵箱
——————————————————————————–
Javascript(js) 郵箱驗(yàn)證正則表達(dá)式 新手實(shí)例:
function isEmail(val){
var myreg = /^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;
if(!myreg.test(val))
return ‘不是郵箱’;
return ‘是郵箱’;
};
alert( isEmail(‘i@julying.com’) );
</script>