Skip to content

正则校验及合并正则公式的一些想法

Published: at 09:47 PMSuggest Changes

需求

有一个输入框,需要只能输入以下范围的字符 汉字 字母(大小写)数字 . $ @ ( ) _ - < >《 》[ ]

实现

用正则进行判断,真香。

const NoSpecialCharacters =
  /^[a-zA-Z0-9_\.\$\@\(\)\-\<\>\[\]\u4e00-\u9fa5\uF900-\uFA2D《》]+$/;

function regexTest(str, reg) {
  return reg.test(str);
}

regexTest(NoSpecialCharacters, '测试~');

搜集一些网址

搜集了常见的正则表达式,mark 下来

其他骚操作(错误而不成熟的想法)

注意!这可能是个错误的想法。。,因为我感觉哪儿不对劲。。

你们知道哪儿不对劲吗,留个言吧!

// 汉字
const Chinese = /(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+/;

// 字母
const English = /[a-zA-Z]+/;

// 小写
const Lower = /[a-z]/;

// 大写
const Upper = /[A-Z]/;

// 数字
const Num = /\d{1,}/;

// 允许的其他字符
const Other = /\.|\$|\@|\(|\)|_|-|<|>|||\[|\]/;

function mergeRegex(params) {
  let newRegex = params
    .map((e) => {
      const reg = new RegExp(e);
      return reg.source;
    })
    .join('|');
  return new RegExp(newRegex);
}

mergeRegex([Chinese, English, Upper, Lower, Num, Other]);

// 正则匹配数字
const NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;
const numbers = '2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
console.log(numbers); // ["2.2", "3.1", "4", "-7.6"]

// 正则验证密码 (8-20 位字母、数字或字符,至少包含两种)
var reg = /(?!\d+$)(?!^[a-zA-Z]+$)(?!^[_#@]+$).{8,30}/;

Previous Post
Webpack 屏蔽不需要引入的 Less 文件
Next Post
React useState 更新数组无效的问题及解决方法