摘要:下面分別分析出生日期和校驗(yàn)位檢查生日日期是否正確輸入的身份證號(hào)里出生日期不對(duì)將位身份證轉(zhuǎn)成位校驗(yàn)位按照的規(guī)定生成,可以認(rèn)為是數(shù)字。
一、創(chuàng)建方式
字面量創(chuàng)建方式
var reg = /abc/;
對(duì)象RegExp,適合正則表達(dá)式模式不確定的時(shí)候
var reg = new RegExp("abc");
常用:
1. w匹配一個(gè)單字字符(字母,數(shù)字,下劃線) W
2. d匹配一個(gè)數(shù)字 D
3. x|y匹配x或y
例如,/green|red/匹配“green apple”中的‘green’和“redapple”中的‘red’
4. "*"匹配0次或多次
5. "+"匹配1次或多次
6. "?"匹配0次或1次 與"*" "+" 量詞配合使用時(shí),顯示非貪婪屬性 難點(diǎn)
7. "."匹配除了換行符(n)之外的任何單個(gè)字符
8. "x(?=y)"匹配x僅僅當(dāng)x后面緊跟y的時(shí)候 正向肯定查找
var re = /Jack(?= Sprat)/; console.log(re.test("Jack Sprat"));
9. "x(?!y)"匹配"x"僅僅當(dāng)"x"后面不跟著"y 正向否定查找
console.log(/d+(?!.)/.exec("3.141")); //匹配‘141’但是不是‘3.141’
10. "(x)"匹配x并記住該匹配項(xiàng)(記住有啥作用?) 捕獲 難點(diǎn)
var re = /(foo) (bar) 1 2/; console.log(re.test("foo bar foo bar")); //true console.log("bar foo".replace( /(...) (...)/, "$2 $1" )); //foo bar console.log("bar foo".replace( /(...) (...)/, "$1 $2" )); //bar foo
11. "(?:x)"匹配x但不記住 非捕獲 難點(diǎn)
var re = /foo{1,2}/; console.log(re.test("foo")); //只匹配foo最后的一個(gè)o var re = /(?:foo){1,2}/; console.log(re.test("foo")); //匹配foo整個(gè)單詞
其他:
{n}n是正整數(shù),匹配正好n次
{n,m}匹配最少n次最多m次,若n m都為0這這個(gè)值被忽略
[xyz]匹配方括號(hào)中的任意字符 可以用"-"指定一個(gè)字符范圍
1匹配任何沒有包含在方括號(hào)中的字符
[]匹配一個(gè)退格(U+0008)。(不要和混淆了。
匹配詞的邊界 B 反
轉(zhuǎn)移字符
f
s匹配一個(gè)空白字符(包括空格,制表符,換行符) S
v
三、方法exec() 查找匹配的RegExp方法,返回一個(gè)數(shù)組(未匹配則返回null)
test() 測(cè)試是否匹配的RegExp方法,返回true或false
match() 查找匹配的String的方法,返回一個(gè)數(shù)組(未匹配則返回null)
search() 測(cè)試匹配的String方法,返回匹配到的位置索引或在失敗時(shí)返回-1
replace() 查找匹配的String方法,并且使用替換字符串替換匹配的字符串
split() 使用正則表達(dá)式或者字符串分隔字符串,將分隔后的子字符串存儲(chǔ)到數(shù)組中的String方法
自己實(shí)際操作一遍
郵箱驗(yàn)證
/** * * @descrition:判斷輸入的參數(shù)是否是個(gè)合格標(biāo)準(zhǔn)的郵箱,并不能判斷是否有效,有效只能通過郵箱提供商確定。 * @param:str ->待驗(yàn)證的參數(shù)。 * @return -> true表示合格的郵箱。 * */ var isEmail = function(str){ /** * @descrition:郵箱規(guī)則 * 1.郵箱以a-z、A-Z、0-9開頭,最小長度為1. * 2.如果左側(cè)部分包含-、_、.則這些特殊符號(hào)的前面必須包一位數(shù)字或字母。 * 3.@符號(hào)是必填項(xiàng) * 4.右則部分可分為兩部分,第一部分為郵件提供商域名地址,第二部分為域名后綴,現(xiàn)已知的最短為2位。最長的為6為。 * 5.郵件提供商域可以包含特殊字符-、_、. */ var pattern = /^([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,6}$/; return pattern.test(str); }
密碼長度
/** * * @description: 判斷傳入的參數(shù)的長度是否在給定的有效范圍內(nèi) * @param: minL->給定的最小的長度 * @param: maxL->給定的最大的長度 * @param: str->待驗(yàn)證的參數(shù) * @return : true表示合理,驗(yàn)證通過 * */ var isAvaiableLength = function(minL,maxL,str){ return (str.length >= minL && str.length <= maxL) ? true : false; }
手機(jī)
/** * * @descrition:判斷輸入的參數(shù)是否是個(gè)合格的手機(jī)號(hào)碼,不能判斷號(hào)碼的有效性,有效性可以通過運(yùn)營商確定。 * @param:str ->待判斷的手機(jī)號(hào)碼 * @return: true表示合格輸入?yún)?shù) * */ var isCellphone = function(str) { /** *@descrition:手機(jī)號(hào)碼段規(guī)則 * 13段:130、131、132、133、134、135、136、137、138、139 * 14段:145、147 * 15段:150、151、152、153、155、156、157、158、159 * 17段:170、176、177、178 * 18段:180、181、182、183、184、185、186、187、188、189 * */ var pattern = /^(13[0-9]|14[57]|15[012356789]|17[0678]|18[0-9])d{8}$/; return pattern.test(str); }
身份證
/** * * @descrition: 這個(gè)函數(shù)對(duì)輸入的參數(shù)檢查時(shí)候是合格的身份證號(hào)碼,其身份證有效性無法判斷。檢測(cè)的顆粒度可以定制。 * @param->str : 待驗(yàn)證的參數(shù) * @return : true是合格的身份證 false為不合法的身份證 * */ var checkIdCard = function (num) { num = num.toUpperCase(); var cityCode = {11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "內(nèi)蒙古", 21: "遼寧", 22: "吉林", 23: "黑龍江 ", 31: "上海", 32: "江蘇", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山東", 41: "河南", 42: "湖北 ", 43: "湖南", 44: "廣東", 45: "廣西", 46: "海南", 50: "重慶", 51: "四川", 52: "貴州", 53: "云南", 54: "西藏 ", 61: "陜西", 62: "甘肅", 63: "青海", 64: "寧夏", 65: "新疆", 71: "臺(tái)灣", 81: "香港", 82: "澳門", 91: "國外 "}; if(!cityCode[num.substr(0,2)]){ alert("地址編碼錯(cuò)誤"); return false; } //身份證號(hào)碼為15位或者18位,15位時(shí)全為數(shù)字,18位前17位為數(shù)字,最后一位是校驗(yàn)位,可能為數(shù)字或字符X。 if (!(/(^d{15}$)|(^d{17}([0-9]|X)$)/.test(num))) { //alert("輸入的身份證號(hào)長度不對(duì),或者號(hào)碼不符合規(guī)定! 15位號(hào)碼應(yīng)全為數(shù)字,18位號(hào)碼末位可以為數(shù)字或X。"); return false; } //校驗(yàn)位按照ISO 7064:1983.MOD 11-2的規(guī)定生成,X可以認(rèn)為是數(shù)字10。 //下面分別分析出生日期和校驗(yàn)位 var len, re; len = num.length; if (len == 15) { re = new RegExp(/^(d{6})(d{2})(d{2})(d{2})(d{3})$/); var arrSplit = num.match(re); //檢查生日日期是否正確 var dtmBirth = new Date("19" + arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]); var bGoodDay; bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); if (!bGoodDay) { //alert("輸入的身份證號(hào)里出生日期不對(duì)!"); return false; } else { //將15位身份證轉(zhuǎn)成18位 //校驗(yàn)位按照ISO 7064:1983.MOD 11-2的規(guī)定生成,X可以認(rèn)為是數(shù)字10。 var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); var nTemp = 0, k; num = num.substr(0, 6) + "19" + num.substr(6, num.length - 6); for (k = 0; k < 17; k++) { nTemp += num.substr(k, 1) * arrInt[k]; } num += arrCh[nTemp % 11]; return true; } } if (len == 18) { re = new RegExp(/^(d{6})(d{4})(d{2})(d{2})(d{3})([0-9]|X)$/); var arrSplit = num.match(re); //檢查生日日期是否正確 var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]); var bGoodDay; bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); if (!bGoodDay) { //alert(dtmBirth.getYear()); //alert(arrSplit[2]); //alert("輸入的身份證號(hào)里出生日期不對(duì)!"); return false; } else { //檢驗(yàn)18位身份證的校驗(yàn)碼是否正確。 //校驗(yàn)位按照ISO 7064:1983.MOD 11-2的規(guī)定生成,X可以認(rèn)為是數(shù)字10。 var valnum; var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); var nTemp = 0, k; for (k = 0; k < 17; k++) { nTemp += num.substr(k, 1) * arrInt[k]; } valnum = arrCh[nTemp % 11]; if (valnum != num.substr(17, 1)) { //alert("18位身份證的校驗(yàn)碼不正確!應(yīng)該為:" + valnum); return false; } return true; } } return false; }
不為空
/** * * @Dependence : https://gist.github.com/hehongwei44/3e167cfcda47d4c8051a#file-extendstringprototype-js * @description : 判斷輸入的參數(shù)是否為空 * @return : true表示為輸入?yún)?shù)為空 * */ var isEmpty = function (str) { //空引用 空字符串 空輸入 return str === null || typeof str === "undefined" || String(str).replace(/^s+|s+$/g, "").length === 0 ? true : false; }
郵編
/** * * @descrition:判斷輸入的參數(shù)是否是國內(nèi)合法的郵編地址(ps:國內(nèi)不包含國外的郵編) * @link: http://www.youbianku.com/%E9%A6%96%E9%A1%B5 * @param: str為待驗(yàn)證的郵編號(hào)碼 * @return: true表示為合法的郵編號(hào)碼 * */ var isPostcode = function(str) { //國內(nèi)郵編以0-8開頭的6為數(shù)字 var pattern = /^[0-8]d{5}$/; return pattern.test(str); }
銀行卡
//Description: 銀行卡號(hào)Luhm校驗(yàn) //Luhm校驗(yàn)規(guī)則:16位銀行卡號(hào)(19位通用): // 1.將未帶校驗(yàn)位的 15(或18)位卡號(hào)從右依次編號(hào) 1 到 15(18),位于奇數(shù)位號(hào)上的數(shù)字乘以 2。 // 2.將奇位乘積的個(gè)十位全部相加,再加上所有偶數(shù)位上的數(shù)字。 // 3.將加法和加上校驗(yàn)位能被 10 整除。 //bankno為銀行卡號(hào) banknoInfo為顯示提示信息的DIV或其他控件 function luhmCheck(bankno){ var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(與luhm進(jìn)行比較) var first15Num=bankno.substr(0,bankno.length-1);//前15或18位 var newArr=new Array(); for(var i=first15Num.length-1;i>-1;i--){ //前15或18位倒序存進(jìn)數(shù)組 newArr.push(first15Num.substr(i,1)); } var arrJiShu=new Array(); //奇數(shù)位*2的積 <9 var arrJiShu2=new Array(); //奇數(shù)位*2的積 >9 var arrOuShu=new Array(); //偶數(shù)位數(shù)組 for(var j=0;j9 的分割之后的數(shù)組個(gè)位數(shù) var jishu_child2=new Array();//奇數(shù)位*2 >9 的分割之后的數(shù)組十位數(shù) for(var h=0;h 9 的分割之后的數(shù)組個(gè)位數(shù)之和 var sumJiShuChild2=0; //奇數(shù)位*2 >9 的分割之后的數(shù)組十位數(shù)之和 var sumTotal=0; for(var m=0;m 視頻格式
六、總結(jié)
/^https?.+.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i.test(string)1.首先給定校驗(yàn)的規(guī)則(需要跟產(chǎn)品討論)
2.熟悉正則表達(dá)式的模式 (practice)
3.多實(shí)踐,一下不看別人的代碼(todo)引用的資料:
https://segmentfault.com/a/11...
https://developer.mozilla.org...xyz ?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/91032.html
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...
摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...
摘要:正則表達(dá)式一直是里比較難以掌握的點(diǎn)。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達(dá)式的字面量語法,表示正則表達(dá)式的模式,為正則表達(dá)式的標(biāo)志。字面量形式的正則表達(dá)式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習(xí)慣。 正則表達(dá)式一直是js里比較難以掌握的點(diǎn)。 看不懂,學(xué)不會(huì),記不住。 每次需要用到正則的時(shí)候,都需要再去查找資料。 今天花時(shí)間把正則的知識(shí)點(diǎn)總結(jié)下,希望...
摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語言對(duì)于正則不同支持參考單行模式與多行模式通過設(shè)置正則表達(dá)式后的修飾符可開啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來源于語言書上那幾頁的介紹, 自己也沒有用過幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...
摘要:選擇分組和引用正則表達(dá)式的語法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號(hào)的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對(duì)象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...
閱讀 1070·2023-04-26 02:49
閱讀 1240·2021-11-25 09:43
閱讀 2625·2021-11-18 10:02
閱讀 2986·2021-10-18 13:32
閱讀 1336·2019-08-30 13:54
閱讀 2143·2019-08-30 12:58
閱讀 3077·2019-08-29 14:06
閱讀 2220·2019-08-28 18:10