Regular Expression 正规表达式
JavaScript 正规表达式 Regular Expression 的文本处理工具,通常是由特殊字符和普通字符组成的模式,用来描述需要匹配的文本。可以用来 search 搜索、replace 替换、分割 split 和验证字符串。正规表达式通常是由特殊字符和普通字符组成的模式,用来描述需要匹配的文本。在 JavaScript 中可以使用 RegExp 对象来创建正规表达式并使用 JavaScript String 对象的 match、search、replace 替换字符串和 split 方法来分割字符串,对 String 字符串进行操作。
let value = document.getElementById("input").value;
let regex = /^[A-Za-z]+$/;
let result = regex.test(value);
console.log(result);
RegExp 比对文字模式的方法 test() 对输入字串加以处理,寻找符合表达式规则的子字串。
正则表达式「符合规则时」传回 true;没有符合时传回 false。
线上 JavaScript 正规式测试验证
浏览器通用的正规表示式 Regular Expression 语法整理,正则表达式的基本概念、对于数字验证、信箱、手机号码、字符串验证、数字长度范围和英文字母、密码验证、中文、日文、韩文、特殊符号全域匹配方式。
验证由 26 个英文字母组成的字串(大写及小写),^ 文字的开始位置。$ 文字行的尾端。
/^[A-Za-z]+$/
/^[A-Z]+$/i
验证只能输入 3 个数字,限制字串长度。
/^\d{3}$/
验证只能输入 3~6 个数字,限制字串长度范围。
/^\d{3,6}$/
验证输入需 6~10 个由英文字母(大写或小写)或数字混合。但 [A-Z0-9] 所以全英文 AAAAAA 或全数字 111111 是符合的。
/^[A-Z0-9]{6,10}$/i
验证密码输入需 6~10 个由至少有一个数字、至少有一个小写英文字母、至少有一个大写英文字母。但包括了 \W 不属于英文大小写字母、数字及底线外的字。
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{6,10}$/
验证密码输入需 6~10 个由至少有一个数字、至少有一个小写英文字母、至少有一个大写英文字母。至少有一个「特殊符号」。
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{6,10}$/
至少有一个「规定的 [#$%*] 特殊符号」但需要预先处理掉其他的特殊符号。
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$%*]).{6,10}$/
\W 特殊符号中的一部份
- "
- #
- $
- %
- &
- '
- (
- )
- *
- +
- ,
- .
- /
- :
- ;
- <
- =
- >
- ?
- @
- [
- ]
- ^
- `
- {
- |
- }
- ~
- -
验证手机号码,仅验证格式,当使用单一栏位时加入 ^ 文字的开始位置。$ 文字行的尾端。若于本文情况如 match 就不需要了。
/^09\d{2}-\d{6}$/
使用 match 进行规则运算式全域匹配
let eTextarea = document.querySelector("textarea").value;
let regEx = /[\u3041-\u30FF]+/g;
let result = eTextarea.match(regEx);
console.log(result);
匹配「表单栏位」中的手机号码格式。
/09\d{2}-\d{6}/
匹配中文简繁体字,范围有 20,992 字。注意里面有些属于表示部首的并不包括,日文汉字则符合。
/[\u4E00-\u9FFF]+/g
匹配康熙部首,范围有 214 字用于表示部首的字符。
/[\u2F00-\u2FD5]+/g
匹配注音扩展
/[\u3105-\u312F]+/g
匹配全形字(包含中文、日文、韩文、特殊符号)
/[^\x00-\xff]+/g
匹配日文(不包含日文汉字)
/[\u3041-\u30FF]+/g
/[\u3040-\u309F]+/g // 平假名
/[\u30A0-\u30FF]+/g // 片假名
匹配韩文,范围有 11,172 字,但是无法分辨是否正确。
/[\uAC00-\uD7A3]+/g
用四个十六进位数位表示的 Unicode 字元。
Unicode 区段以参考维基百科,区段被定义为一组连续码位的范围。区段会被给予唯一的名称,且区段与区段间不会重叠。再依照更细的范围匹配需要的文字。全形符号、「直式」标点符号、半角符号、全角符号等。
RegExp 包裹起来内的文字
var wrapTxt = "ABC-ABC[XYZ]001 56789"
var wrapReg = /\[.*\]/;
wrapReg.test(wrapTxt); // true
wrapTxt.match(wrapReg); // [XYZ]
wrapTxt.replace(wrapReg, " ## "); // ABC-ABC ## 001 56789
身分证字号
身分证字号,仅验证格式无验算公式。第一个英文字母县市代码、第二个表示性别,男 = 1、女 = 2 接着 \d{8} 数字编号。
/^[A-Z](1|2)\d{8}$/
加入 JavaScript 身分证字号验算公式
A123456789
第一个英文字母 (A) 县市代码表示县市代码(由字母对照中取得 2 位的数字编号,分别用 L1 和 L2 表示)
第二个数字 (S) 表示性别,男 = 1、女 = 2
第三个数字到第十个数字,流水号分别以 D1、D3.....D8 表示。
V = L1×1 + L2×9 + S×8 + D1×7 + D2×6 + D3×5 + D4×4 + D5×3 + D6×2 + D7×1 + D8×1
假如 V 能被 10 整除,则表示身分证统一编号正确。
function Validation() {
var codeString = document.getElementById("INPUT").value;
if (/^[A-Z](1|2)\d{8}$/.test(codeString)) {
var a = {A:10,B:11,C:12,D:13,E:14,F:15,G:16,H:17,J:18,K:19,L:20,
M:21,N:22,P:23,Q:24,R:25,S:26,T:27,U:28,V:29,X:30,Y:31,
W:32,Z:33,I:34,O:35}[codeString.substr(0, 1)].toString();
a = parseInt(a.substr(0, 1)) + parseInt(a.substr(1, 1) * 9);
for (var i = 1; i < codeString.length; i++) {
var d = 9 - i;
d = 0 == d ? 1 : d;
a += parseInt(codeString.substr(i, 1)) * d;
}
return 0 == a % 10 ? "正确" : "检查码不正确";
}
return "格式不正确";
};