需求
有一个输入框,需要只能输入以下范围的字符 汉字 字母(大小写)数字 . $ @ ( ) _ - < >《 》[ ]
实现
用正则进行判断,真香。
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}/;