JavaScript正則表達(dá)式匯編?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
站在用戶的角度思考問題,與客戶深入溝通,找到巴中網(wǎng)站設(shè)計(jì)與巴中網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋巴中地區(qū)。
在做用戶注冊(cè)時(shí),都會(huì)用到用戶名正則校驗(yàn)。
定義基本用戶名命名規(guī)則如下:
最短4位,最長(zhǎng)16位 {4,16}
可以包含小寫大母 [a-z] 和大寫字母 [A-Z]
可以包含數(shù)字 [0-9]
可以包含下劃線 [ _ ] 和減號(hào) [ - ]
首字母只能是大小寫字母
var pattern = /^[a-zA-Z][a-zA-Z0-9_-]{3,15}$/; //輸出 true console.log("ifat3 : "+pattern.test('ifat3')); //輸出 true console.log("Ifat3 : "+pattern.test('Ifat3')); //輸出 true console.log("ke30 : "+pattern.test('ke30')); //輸出 false console.log("30ke : "+pattern.test('30ke')); //輸出 false console.log("ke3 : "+pattern.test('ke3')); 輸出 false console.log("ke30@ : "+pattern.test('ke30@')); //輸出 false console.log("ke30ke30ke30ke30ke30 : "+pattern.test('ke30ke30ke30ke30ke30'));
如果規(guī)則中加入允許中文用戶名,則變更正則表達(dá)式如下:
var pattern = /^[a-zA-Z\u4E00-\u9FA5][a-zA-Z0-9\u4E00-\u9FA5_-]{3,15}$/; //輸出 true console.log("ifat3 : "+pattern.test('ifat3')); //輸出 true console.log("Ifat3 : "+pattern.test('Ifat3')); //輸出 true console.log("三十課毛瑞 : "+pattern.test('三十課毛瑞')); //輸出 false console.log("30ke : "+pattern.test('30ke')); //輸出 false console.log("ke3 : "+pattern.test('ke3')); //輸出 false console.log("ke30@ : "+pattern.test('ke30@')); //輸出 false console.log("ke30ke30ke30ke30ke30 : "+pattern.test('ke30ke30ke30ke30ke30'));
其中[\u4E00-\u9FA5]
是漢字的正則匹配,包括基本漢字2萬多個(gè),其中\(zhòng)u4E00表示漢字“一”,具體請(qǐng)參見《漢字unicode編碼范圍》。
//密碼強(qiáng)度正則,最少6位,包括至少1個(gè)大寫字母,1個(gè)小寫字母,1個(gè)數(shù)字,1個(gè)特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/; //輸出 true console.log("iFat3#:"+pPattern.test("iFat3#"));
上述正則表達(dá)式只能對(duì)用戶密碼強(qiáng)度進(jìn)行基本的通過性判定,關(guān)于密碼強(qiáng)度驗(yàn)證更多的內(nèi)容可參見:基于規(guī)則評(píng)分的密碼強(qiáng)度檢測(cè)算法分析及實(shí)現(xiàn)。
//正整數(shù)正則 var posPattern = /^\d+$/; //負(fù)整數(shù)正則 var negPattern = /^-\d+$/; //整數(shù)正則 var intPattern = /^-?\d+$/; //輸出 true console.log("30:"+posPattern.test("30")); //輸出 true console.log("-30:"+negPattern.test("-30")); //輸出 true console.log("-30:"+intPattern.test("-30"));
//正浮點(diǎn)數(shù)正則 var posPattern = /^\d*\.\d+$/; //負(fù)浮點(diǎn)數(shù)正則 var negPattern = /^-\d*\.\d+$/; //兩位小數(shù)正則 var twoPattern = /^-?\d*\.\d{2}$/; //輸出 true console.log("30.2:"+posPattern.test("30.2")); //輸出 true console.log("-30.2:"+negPattern.test("-30.2")); //輸出 true console.log("-30.22:"+twoPattern.test("-30.22"));
可以是整數(shù)也可以是浮點(diǎn)數(shù)
//正數(shù)正則 var posPattern = /^\d*\.?\d+$/; //負(fù)數(shù)正則 var negPattern = /^-\d*\.?\d+$/; //數(shù)字正則 var numPattern = /^-?\d*\.?\d+$/; //輸出 true console.log("30.2:"+posPattern.test("30.2")); //輸出 true console.log("-30.2:"+negPattern.test("-30.2")); //輸出 true console.log("-30.2:"+numPattern.test("-30.2"));
var pattern = /^((19[2-9]\d{1})|(20((0[0-9])|(1[0-8]))))\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2][0-9])|30|31)$/; //輸出 true console.log(pattern.test("1923-3-18")); //輸出 true console.log(pattern.test("1923-4-31")); //輸出 true console.log(pattern.test("1923-2-29")); //輸出 true console.log(pattern.test("2016-2-29"));
上述正則驗(yàn)證還不完善,主要是2,4,6,9,11月份的天數(shù)問題。
//日期正則,復(fù)雜判定 var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/; //輸出 true console.log(dP2.test("2017-02-11")); //輸出 false console.log(dP2.test("2017-15-11")); //輸出 false console.log(dP2.test("2017-02-29"));
var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; //輸出 true console.log(pattern.test('cn30ke@163.com')); //輸出 true console.log(pattern.test('ifat3@sina.com.cn')); //輸出 true console.log(pattern.test('ifat3.it@163.com')); //輸出 true console.log(pattern.test('ifat3_-.@30ke.cn')); //輸出 false console.log(pattern.test('ifat3@30ke.online')); //輸出 false console.log(pattern.test('毛瑞@30ke.cn'));
基本Email正則是最常用的驗(yàn)證方式,也適合大多數(shù)的應(yīng)用場(chǎng)景。從以上測(cè)試可以看出,該表達(dá)式不支持.online及.store結(jié)尾的域名。如需兼容這類域名(大于4位),調(diào)整正則結(jié)尾{2,4}的限制部分即可(例:{2,8})。另一個(gè)問題是Email用戶名不能包括中文。
根據(jù)前一正則中的問題,追加兩條規(guī)則如下:
用戶名可以包括中文 [\u4e00-\u9fa5]
域名結(jié)尾最長(zhǎng)可為8位 {2,8}
var pattern = /^([A-Za-z0-9_\-\.\u4e00-\u9fa5])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/; //輸出 true console.log(pattern.test('cn30ke@163.com')); //輸出 true console.log(pattern.test('ifat3@sina.com.cn')); //輸出 true console.log(pattern.test('ifat3.it@163.com')); //輸出 true console.log(pattern.test('ifat3_-.@30ke.cn')); //輸出 true console.log(pattern.test('ifat3@30ke.online')); //輸出 true console.log(pattern.test('毛瑞@30ke.cn'));
在手機(jī)驗(yàn)證碼出現(xiàn)之前,差不多郵箱驗(yàn)證是保證用戶唯一性的唯一條件。而臨時(shí)郵箱(也稱10分鐘郵箱或一次性郵箱)的出現(xiàn),則使得郵箱驗(yàn)證及帳戶激活這種機(jī)制失去了意義。而臨時(shí)郵箱的地址是不可枚舉的,我們只能才采取白名單的方式,只允許有限的郵箱域名通過驗(yàn)證。
var pattern = /^([A-Za-z0-9_\-\.])+\@(163.com|qq.com|30ke.cn)$/; //輸出 true console.log(pattern.test('cn30ke@163.com')); //輸出 false console.log(pattern.test('ifat3@sina.com.cn')); //輸出 true console.log(pattern.test('ifat3.it@163.com')); //輸出 true console.log(pattern.test('ifat3_-.@30ke.cn')); //輸出 false console.log(pattern.test('ifat3@30ke.online')); //輸出 false console.log(pattern.test('毛瑞@30ke.cn'));
此方法雖然能保證驗(yàn)證安全性,但是如果白名單太長(zhǎng)會(huì)造成模式字符串太長(zhǎng)。這時(shí)可以將郵箱域名白名單寫成數(shù)組,利用正則表達(dá)式做初步驗(yàn)證,用白名單做域名的二次驗(yàn)證。
常用域名白名單數(shù)組:
var domains= ["qq.com","163.com","vip.163.com","263.net","yeah.net","sohu.com","sina.cn","sina.com","eyou.com","gmail.com","hotmail.com"];
上述白名單只列舉了常用的11種郵箱域名,大家可以根據(jù)需要適當(dāng)補(bǔ)充或刪減。
//手機(jī)號(hào)正則 var mPattern = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/; //輸出 true console.log(mPattern.test("18600000000"));
//身份證號(hào)(18位)正則 var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; //輸出 true console.log(cP.test("11010519880605371X"));
上述正則只能對(duì)身份證號(hào)進(jìn)行基本的通過性判定,關(guān)于公民身份號(hào)碼判定的更多內(nèi)容可參見文檔:公民身份號(hào)碼正確性判定及程序?qū)崿F(xiàn)
//URL正則 var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/; //輸出 true console.log(urlP.test(http://30ke.cn));
//ipv4地址正則 var ipP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; //輸出 true console.log(ipP.test("115.28.47.26"));
//IPV6正則 var pattern = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/; //輸出 true console.log(pattern.test("fe80:0000:0000:0000:0204:61ff:fe9d:f156"));
//RGB Hex顏色正則 var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/; //輸出 true console.log(cPattern.test("#b8b8b8"));
//QQ號(hào)正則,5至11位 var qqPattern = /^[1-9][0-9]{4,10}$/; //輸出 true console.log(qqPattern.test("65974040"));
//微信號(hào)正則,6至20位,以字母開頭,字母,數(shù)字,減號(hào),下劃線 var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/; //輸出 true console.log(wxPattern.test("RuilongMao"));
//車牌號(hào)正則 var cPattern = /^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領(lǐng)A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9掛學(xué)警港澳]{1}$/; //輸出 true console.log(cPattern.test("京K39006"));
//包含中文正則 var cnPattern = /[\u4E00-\u9FA5]/; //輸出 true console.log(cnPattern.test("30課"));
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。