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 "格式不正確";
};