天天看点

常用正则校验集合

数字转千位符

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;
`))
           

继续阅读