1. 程式人生 > >正則表達式w並不完全等於[A-Za-z0-9]

正則表達式w並不完全等於[A-Za-z0-9]

單詞 存在 問題 targe 出現 網上 pan 英文字母 target

原文地址:http://blog.csdn.net/sinat_34719507/article/details/54430555

一般大家在書本上還是網上資料正則表達式中\w都被介紹為匹配任何單詞字符,包括字母和下劃線,等效於[A-Za-z0-9]。
今天偶然間發現會員註冊中出現了一個惡作劇賬號"аdmin",註意到那個а了沒?那是一個俄文字母,在會員註冊過濾中使用\w驗證並不能防止。
也就是說\w包括了英文字母以及俄文字母等,在會員註冊這塊我們肯定不希望類同的賬號出現,要不然很容易造成會員間的誤會。所以改為^[A-Za-z0-9\u4E00-\u9FA5-]{2,16}$驗證,只允許數字、26個英文字母大小寫、中文及其組合。


通過網絡檢測發現,目前的大部分網站賬號基本有此誤檢測的BUG,DZ的不論PHP還是net版均存在此問題。想象一下吧,一個網站已存存在一個英文會員賬號“admin”,再出現一個俄文或俄文英文混合的賬號,如“аdmin”,夠混淆混亂吧?

正則表達式\w並不完全等於[A-Za-z0-9]