JavaScriptでの正規表現ベースの適用

16294 ワード

regular expression:RegExp
正規表現はtest()を検証として使用してもよいし、match()、exec()を取得として使用してもよい.
let str = "good good study , day day up!";
let reg = /\d+/; //        
reg.test(str); //=>false

str = "2019-10-01";
reg.exec(str); //=>["2019",index:0,inputs:"     "]

1.正規表現の作成
作成方法は2つあります.
//=>       (          ,            )
let reg1 = /\d+/;

//=>              :      ,      
let reg2 = new RegExp("\\d+");

 
正規表現は2つの部分からなり、メタ文字 および 修飾子
 
メタ文字:
単語メタ:出現回数を設定する
*   //      
+   //    
?   //      
{n}   //  n 
{n,}   //  n   
{n,m}   //  n m 

特殊なメタ文字:単一または組み合わせて特殊な意味を表す
\        //    (  ->  ->  )
.        // 
( )
^ // $ //
// \d //0~9 \D // 0~9 ( ) \w // 、 、 \s // ( 、 、 ) \t // ( TAB : ) \b // x|y //x y [xyz] //x y z [^xy] // x/y [a-z] // a-z [0-9a-zA-Z_]===\w [^a-z] // “ ” () // (?:) // (?=) // (?!) //

普通のメタ文字:自分の意味を表す
/hello/     //         "hello"

 
二、修飾子:
    /*           :i-m-g*/

i =>ignoreCase      //         
m =>multiline       //        
g =>global          //    


/A/.test('lalala')  =>false
/A/i.test('lalala') =>true


 
 
メタ文字の詳細な適用
^ $
let reg = /^\d/;
console.log(reg.test("hello")); //=>false
console.log(reg.test("2019hello"));//=>true
console.log(reg.test("hello2019"));//=>false

let reg = /\d$/;
console.log(reg.test("hello")); //=>false
console.log(reg.test("2019hello"));//=>false
console.log(reg.test("hello2019"));//=>true

//=>^/$     :               
let reg1 = /\d+/;
//=>^/$    :              
let reg2 = /^\d+$/;

//=>    :      (11 ,      1  )
let reg = /^1\d{10}$/;

 
\
let reg = /^2.3$/;
console.log(reg.test("2.3"));    //=>true
console.log(reg.test("2@3"));    //=>true
console.log(reg.test("23"));    //=>false

//=>      ,         
reg = /^2\.3$/;
console.log(reg.test("2.3"));    //=>true
console.log(reg.test("2@3"));    //=>false

let str = "\\d";
reg = /^\d$/;     //=>\d  0-9   
console.log(reg.test(str));     //=>false
reg = /^\\d$/;     //=>           
console.log(reg.test(str));     //=>true    

x|y
let reg = /^18|29$/;
console.log(reg.test("18")); //=>true
console.log(reg.test("29")); //=>true
console.log(reg.test("129")); //=>true
console.log(reg.test("189")); //=>true
console.log(reg.test("1829")); //=>true
console.log(reg.test("829")); //=>true
console.log(reg.test("182")); //=>true
//---  x|y           ,                   ,              =>   :  
reg = /^(18|29)$/;
console.log(reg.test("18")); //=>true
console.log(reg.test("29")); //=>true
console.log(reg.test("129")); //=>false
console.log(reg.test("189")); //=>false
//=>   18  29     

[ ]
//1.                   
let reg = /^[@+]$/;
console.log(reg.test("@")); //=>true
console.log(reg.test("+")); //=>true
console.log(reg.test("@@")); //=>false
console.log(reg.test("@+")); //=>false

reg = /^[\d]$/; //=>\d       0-9
console.log(reg.test("d"));//=>false
console.log(reg.test("\\"));//=>false
console.log(reg.test("9"));//=>true

//2.          
reg = /^[18]$/;
console.log(reg.test("1")); //=>true
console.log(reg.test("8")); //=>true
console.log(reg.test("18")); //=>false

reg = /^[10-29]$/; //=>1  0-2  9
console.log(reg.test("1"));//=>true
console.log(reg.test("9"));//=>true
console.log(reg.test("0"));//=>true
console.log(reg.test("2"));//=>true
console.log(reg.test("10"));//=>false

 
いくつかの例を挙げます.
1. 有効な数値であることを確認
    /*     
    * 1.     + -  ,        [+-]?
    * 2.  0-9   ,       0 (\d|([1-9]\d+))
    * 3.           ,           +   (\.\d+)?
    */

   let reg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;

 
2.パスワードの検証
//=>  、  、   
   //=>6~16 
   let val = userPassInp.value,
       reg = /^\w{6,16}$/;
   let flag=reg.test(val);


   function checkPass(val){
       if(val.length<6 || val.length>16){
           alert('      6-16   !');
           return;
       }
       let area=['a','b'....'_']; //=>    、  、   
       for(let i=0;i){
           let char=val[i];
           if(!area.includes(char)){
               alert('     !');
               return;
           }
       }
   }

 
3. 実名の確認
   /*
    * 1.    /^[\u4E00-\u9FA5]$/
    * 2.     2~10 
    * 3.      ·    (·[\u4E00-\u9FA5]{2,10}){0,2}
    */

   let reg = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10}){0,2}$/;

 
4. メールボックスの検証
  let reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
   
   //=> \w+((-\w+)|(\.\w+))*
   //1.          (1   )
   //2.     -           .       ,      

 
5. 身分証明書番号(具体的な照合は省市県各地のコード番号も結合する)
/*
    * 1.   18 
    * 2.        X
    *
    *       :     
    *     :   
    *     :
    *        => X    
    *         =>           
    *               
    */
   //let reg = /^\d{17}(\d|X)$/;
   //=>           :    ,                ,                
   let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d)(\d|X)$/;
   reg.exec("123456789012345678"); //=>       ,