天天看點

常用正則校驗集合

數字轉千位符

const reg= function(numStr){
    return numStr.toString().replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,'$&,')
    //stringObject.replace(regexp/substr,replacement)參數 描述 
	/* replacement====>
		$1、$2、...、$99	與 regexp 中的第 1 到第 99 個子表達式相比對的文本。
		$&	與 regexp 相比對的子串。
		$`	位于比對子串左側的文本。
		$'	位于比對子串右側的文本。
		$$	直接量符号。*/
 }
           

單詞首字母大寫

var str = "my name is niu ,i am 28 years old";
        var newStr = str.replace(/\b[a-z]/g, function (a) { //arguments[0]=a
              console.log(a);
            return a.toUpperCase()
        })
        console.log(newStr); //My Name Is Niu ,I Am 28 Years Old
           

郵箱驗證

驗證中文名

身份證驗證

/*身份證
18位
前6位是省市
中間8位是生日
倒數四位
前兩位是警察局代碼
第三位是性别,奇數是男,偶數是女
最後一位是數字,有可能是X */

   let reg3 = /^(\d{6})([1-2]\d{3})((0[1-9])|(1[0-2]))((0[1-9])|([1-2]\d)|(3[0-1]))\d{2}(\d)(\d|X)$/;
           

擷取url裡的參數-

  • 例1
let url = 'http://www.baidu.com?name=erYa&age=18#index';
        function queryUrlParams() {
            let reg = /([^?=&#]+)=([^?=&#]+)/g;
            let obj = {}; // 建立一個空對象,用來存儲一會處理的鍵值對
            this.replace(reg, (content, key, value) => {
                // content是每一次全局捕獲的内容,
                // key是每一次第一個分組捕獲的内容(作為屬性名)
                // value是每一次第二個分組捕獲的内容(作為屬性值)
                obj[key] = value;
            });
            // 把url裡的參數捕獲出來,以鍵值對的形式指派給obj對象
            this.replace(/#([^?=&#]+)/, (content, value) => {
                // value是每一次分組捕獲的内容(作為屬性值)
                obj['hash'] = value;
            })
            // 把url裡的hash值捕獲出來,以鍵值對的格式指派給obj對象
            return obj;
            // 最後把obj對象return 出去
        }
        String.prototype.queryUrlParams = queryUrlParams;
        console.log(url.queryUrlParams()); /*{age: "18",hash: "index",name: "erYa"}*/
           
  • 例2
let url = 'http://www.baidu.com?name=erYa&age=18#index';
 function  getUrlParameter(name){
		let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
		let r = window.location.search.substr(1).match(reg);
		if(r != null) return decodeURIComponent(r[2]);
		return null;
	}
	getUrlParameter('name') //erYa
           

手機号格式化( 3-4-4分割)

const reg= function(numStr){
    return numStr.toString().replace(/(?<=\d{3})\d+/, ($0) =>{ 
    return  '-' + $0;
    console.log($0)//$0 ==>3456789
    }) .replace(/(?<=[\d-]{8})\d{1,4}/, ($0) => '-' + $0)
    //釋:(?<=(href=")) 表示 比對以(href=" target="_blank" rel="external nofollow" )開頭的字元串,并且捕獲(存儲)到分組中
    //先把電話号變為123-45678900在以前八位為數字和-開頭 在吧結尾替換為 -8900;
 }
           

密碼驗證

  • 密碼長度是6-12位,由數字、小寫字母和大寫字母組成,但必須至少包括2種字元
let a = function (numStr) {
        let aa = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$/
        return aa.test(numStr)
    };
           

去除字元串中空格

function trim (str){
  return str.replace(/\s/g, '') 
}
// 去除收尾空格
const trim = (str) => {
  return str.replace(/^\s*|\s*$/g, '')    
}
           

html轉義

  • 防止XSS攻擊的方式之一就是做HTML轉義,轉義規則如下,要求将對應字元轉換成等值的實體。而反轉義則是将轉義後的實體轉換為對應的字元
  • xss攻擊:有的時候頁面中會有一個輸入框,使用者輸入内容後會顯示在頁面中,類似于網頁聊天應用。如果使用者輸入了一段js腳本,比例 “”,引号裡其實有段代碼但是csdn轉義了顯示不出,正常頁面會彈出一個對話框,或者輸入的腳本中有改變頁面js變量的代碼則會時程式異常或者達到跳過某種驗證的目的
const escape = (string) => {
        const escapeMaps = {
            '&': 'amp',
            '<': 'lt',
            '>': 'gt',
            '"': 'quot',
            "'": '#39'
        }
        // 這裡和/[&<>"']/g的效果是一樣的
        const escapeRegexp = new RegExp(`[${Object.keys(escapeMaps).join('')}]`, 'g')

        return string.replace(escapeRegexp, (match) => `&${escapeMaps[match]};`)
    }
    console.log(escape(`
  <div>
    <p>hello world</p>
  </div>
`))
           

html反轉義

const unescape = (string) => {
  const unescapeMaps = {
    'amp': '&',
    'lt': '<',
    'gt': '>',
    'quot': '"',
    '#39': "'"
  }
  const unescapeRegexp = /&([^;]+);/g

  return string.replace(unescapeRegexp, (match, unescapeKey) => {
    return unescapeMaps[ unescapeKey ] || match
  })
}
console.log(unescape(`
  &lt;div&gt;
    &lt;p&gt;hello world&lt;/p&gt;
  &lt;/div&gt;
`))
           

繼續閱讀