国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式

iKcamp / 3234人閱讀

摘要:下面分別分析出生日期和校驗位檢查生日日期是否正確輸入的身份證號里出生日期不對將位身份證轉成位校驗位按照的規定生成,可以認為是數字。

一、創建方式

字面量創建方式
var reg = /abc/;
對象RegExp,適合正則表達式模式不確定的時候
var reg = new RegExp("abc");

二、表達式模式(部分)

常用:

1. w匹配一個單字字符(字母,數字,下劃線) W
2. d匹配一個數字 D
3. x|y匹配x或y

例如,/green|red/匹配“green apple”中的‘green’和“redapple”中的‘red’

4. "*"匹配0次或多次
5. "+"匹配1次或多次
6. "?"匹配0次或1次 與"*" "+" 量詞配合使用時,顯示非貪婪屬性 難點
7. "."匹配除了換行符(n)之外的任何單個字符
8. "x(?=y)"匹配x僅僅當x后面緊跟y的時候 正向肯定查找

var re = /Jack(?= Sprat)/; console.log(re.test("Jack Sprat"));

9. "x(?!y)"匹配"x"僅僅當"x"后面不跟著"y 正向否定查找

console.log(/d+(?!.)/.exec("3.141")); //匹配‘141’但是不是‘3.141’

10. "(x)"匹配x并記住該匹配項(記住有啥作用?) 捕獲 難點

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但不記住 非捕獲 難點

 
 var re = /foo{1,2}/;  console.log(re.test("foo")); //只匹配foo最后的一個o 
 var re = /(?:foo){1,2}/;  console.log(re.test("foo")); //匹配foo整個單詞


其他:

{n}n是正整數,匹配正好n次

{n,m}匹配最少n次最多m次,若n m都為0這這個值被忽略

[xyz]匹配方括號中的任意字符 可以用"-"指定一個字符范圍

1匹配任何沒有包含在方括號中的字符

[]匹配一個退格(U+0008)。(不要和混淆了。

匹配詞的邊界 B 反

轉移字符

f

s匹配一個空白字符(包括空格,制表符,換行符) S

v

三、方法

exec() 查找匹配的RegExp方法,返回一個數組(未匹配則返回null)
test() 測試是否匹配的RegExp方法,返回true或false
match() 查找匹配的String的方法,返回一個數組(未匹配則返回null)
search() 測試匹配的String方法,返回匹配到的位置索引或在失敗時返回-1
replace() 查找匹配的String方法,并且使用替換字符串替換匹配的字符串
split() 使用正則表達式或者字符串分隔字符串,將分隔后的子字符串存儲到數組中的String方法

四、標志

五、實例

自己實際操作一遍
郵箱驗證

/**
*
* @descrition:判斷輸入的參數是否是個合格標準的郵箱,并不能判斷是否有效,有效只能通過郵箱提供商確定。
* @param:str ->待驗證的參數。
* @return -> true表示合格的郵箱。
* 
*/
var isEmail = function(str){
    /**
    * @descrition:郵箱規則
    * 1.郵箱以a-z、A-Z、0-9開頭,最小長度為1.
    * 2.如果左側部分包含-、_、.則這些特殊符號的前面必須包一位數字或字母。
    * 3.@符號是必填項
    * 4.右則部分可分為兩部分,第一部分為郵件提供商域名地址,第二部分為域名后綴,現已知的最短為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: 判斷傳入的參數的長度是否在給定的有效范圍內
* @param: minL->給定的最小的長度
* @param: maxL->給定的最大的長度
* @param: str->待驗證的參數
* @return : true表示合理,驗證通過
* 
*/
var isAvaiableLength = function(minL,maxL,str){
    return (str.length >= minL && str.length <= maxL) ? true : false;
}

手機

/**
*
* @descrition:判斷輸入的參數是否是個合格的手機號碼,不能判斷號碼的有效性,有效性可以通過運營商確定。
* @param:str ->待判斷的手機號碼
* @return: true表示合格輸入參數
* 
*/

var isCellphone = function(str) {
    /**
    *@descrition:手機號碼段規則
    * 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: 這個函數對輸入的參數檢查時候是合格的身份證號碼,其身份證有效性無法判斷。檢測的顆粒度可以定制。
* @param->str : 待驗證的參數
* @return : true是合格的身份證   false為不合法的身份證
* 
*/
var checkIdCard = function (num) {
        num = num.toUpperCase();

        var cityCode = {11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "內蒙古", 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: "臺灣", 81: "香港", 82: "澳門", 91: "國外 "};

        if(!cityCode[num.substr(0,2)]){
            alert("地址編碼錯誤");
            return false;
        }
        //身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最后一位是校驗位,可能為數字或字符X。
        if (!(/(^d{15}$)|(^d{17}([0-9]|X)$)/.test(num))) {
            //alert("輸入的身份證號長度不對,或者號碼不符合規定!
15位號碼應全為數字,18位號碼末位可以為數字或X。");
            return false;
        }
        //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。
        //下面分別分析出生日期和校驗位
        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("輸入的身份證號里出生日期不對!");
                return false;
            }
            else {
                //將15位身份證轉成18位
                //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字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("輸入的身份證號里出生日期不對!");
                return false;
            }
            else {
                //檢驗18位身份證的校驗碼是否正確。
                //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字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位身份證的校驗碼不正確!應該為:" + valnum);
                    return false;
                }
                return true;
            }
        }
        return false;
    }

不為空

/**
*
* @Dependence : https://gist.github.com/hehongwei44/3e167cfcda47d4c8051a#file-extendstringprototype-js
* @description : 判斷輸入的參數是否為空
* @return : true表示為輸入參數為空 
* 
*/
var isEmpty = function (str) {
    //空引用  空字符串  空輸入
    return str === null || typeof str === "undefined" || String(str).replace(/^s+|s+$/g, "").length === 0 ? true : false;
}

郵編

/**
*
* @descrition:判斷輸入的參數是否是國內合法的郵編地址(ps:國內不包含國外的郵編)
* @link: http://www.youbianku.com/%E9%A6%96%E9%A1%B5
* @param: str為待驗證的郵編號碼
* @return: true表示為合法的郵編號碼
* 
*/

    var isPostcode = function(str) {
            //國內郵編以0-8開頭的6為數字
            var pattern = /^[0-8]d{5}$/;
            return pattern.test(str);
    
    }

銀行卡

//Description:  銀行卡號Luhm校驗
//Luhm校驗規則:16位銀行卡號(19位通用):
// 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位于奇數位號上的數字乘以 2。
// 2.將奇位乘積的個十位全部相加,再加上所有偶數位上的數字。
// 3.將加法和加上校驗位能被 10 整除。 
//bankno為銀行卡號 banknoInfo為顯示提示信息的DIV或其他控件

function luhmCheck(bankno){
    var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(與luhm進行比較)

    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位倒序存進數組
        newArr.push(first15Num.substr(i,1));
    }
    var arrJiShu=new Array();  //奇數位*2的積 <9
    var arrJiShu2=new Array(); //奇數位*2的積 >9

    var arrOuShu=new Array();  //偶數位數組
    for(var j=0;j9 的分割之后的數組個位數
    var jishu_child2=new Array();//奇數位*2 >9 的分割之后的數組十位數
    for(var h=0;h9 的分割之后的數組個位數之和
    var sumJiShuChild2=0; //奇數位*2 >9 的分割之后的數組十位數之和
    var sumTotal=0;
    for(var m=0;m

視頻格式
/^https?.+.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i.test(string)

六、總結

1.首先給定校驗的規則(需要跟產品討論
2.熟悉正則表達式的模式 (practice
3.多實踐,一下不看別人的代碼(todo

引用的資料:
https://segmentfault.com/a/11...
https://developer.mozilla.org...

xyz ?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91032.html

相關文章

  • 正則達式

    摘要:本文內容共正則表達式火拼系列正則表達式回溯法原理學習正則表達式,是需要懂點兒匹配原理的。正則表達式迷你書問世了讓幫你生成和解析參數字符串最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。 JS 的正則表達式 正則表達式 一種幾乎可以在所有的程序設計語言里和所有的計算機平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...

    bang590 評論0 收藏0
  • JS中的正則達式

    摘要:構造函數可以有兩個字符串參數,第一個參數包含正則表達式的主體部分。只讀的布爾值,說明這個正則表達式是否帶有修飾符。中正則的擴展構造函數在中,只能接受字符串作為參數,允許其直接接受正則表達式作為參數。 上文傳送門:初探正則表達式 正則表達式是一個描述字符模式的對象,JavaScript 的 RegExp 類表示正則表達式,String 和 RegExp 都定義了方法,后者使用正則表達式進...

    Soarkey 評論0 收藏0
  • JavaScript正則達式總結

    摘要:正則表達式一直是里比較難以掌握的點。在中創建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結下,希望...

    big_cat 評論0 收藏0
  • 正則與JS中的正則

    摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語言對于正則不同支持參考單行模式與多行模式通過設置正則表達式后的修飾符可開啟對應的匹配模式單行模式和多行模式。 最近這段時間幫同學處理一些文檔, 涉及到一些結構化文檔的工作大部分都得使用正則表達式, 之前對于正則的認識大多來源于語言書上那幾頁的介紹, 自己也沒有用過幾次。這里將我之前感到模糊的概念作個整理。因為對JS了解多點,所...

    firim 評論0 收藏0
  • JavaScript正則達式的匹配模式

    摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...

    wqj97 評論0 收藏0
  • 正則達式

    摘要:最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。學習目標了解正則表達式語法在中使用正則表達式在中使 JS高級技巧 本篇是看的《JS高級程序設計》第23章《高級技巧》做的讀書分享。本篇按照書里的思路根據自己的理解和經驗,進行擴展延伸,同時指出書里的一些問題。將會討論安全的類型檢測、惰性載入函數、凍結對象、定時器等話題。1. 安全的類型檢測...

    yibinnn 評論0 收藏0

發表評論

0條評論

iKcamp

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<