Regular Expression 正規表達式

JavaScript 正規表達式 Regular Expression 的文本處理工具,通常是由特殊字符和普通字符組成的模式,用來描述需要匹配的文本。可以用來 search 搜索、replace 替換、分割 split 和驗證字符串。正規表達式通常是由特殊字符和普通字符組成的模式,用來描述需要匹配的文本。在 JavaScript 中可以使用 RegExp 對象來創建正規表達式並使用 JavaScript String 對象的 matchsearchreplace 替換字符串和 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 特殊符號中的一部份

  1. "
  2. #
  3. $
  4. %
  5. &
  6. '
  7. (
  8. )
  9. *
  10. +
  11. ,
  12. .
  13. /
  14. :
  15. ;
  16. <
  17. =
  18. >
  19. ?
  20. @
  21. [
  22. ]
  23. ^
  24. `
  25. {
  26. |
  27. }
  28. ~
  29. -

驗證手機號碼,僅驗證格式,當使用單一欄位時加入 ^ 文字的開始位置。$ 文字行的尾端。若於本文情況如 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 區段以參考維基百科,區段被定義為一組連續碼位的範圍。區段會被給予唯一的名稱,且區段與區段間不會重疊。再依照更細的範圍匹配需要的文字。全形符號、「直式」標點符號、半角符號、全角符號等。

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

身分證縣市代碼表