正規表示式做欄位驗證+常用規則 === 網頁的表單中,輸入框常會需要做驗證,阻擋使用者亂輸入無效的值。 除了後端需要做防呆的驗證,前端再call api送資料給後端前,也應該做欄位驗證,而不是當使用者填完表單的一堆資料,最後call api才回傳錯誤告訴使用者,這樣的使用者體驗是很不好的。 我們要來使用前端javascript搭配正規表示式來做驗證匹配字串。 :::warning 參考這篇 [正規表示式:寫法規則介紹](https://hackmd.io/@eating-coding/SJzEblwkY) 複習正規表示式! ::: javascript 驗證匹配 --- 在javascript中,可以使用 ```test``` 、 ```match``` 、 ```exec``` 語法來做正規表示式。 簡單範例:驗證是否為純數字 ```javascript=1 const regex = /^[0-9]+$/; // 驗證規則 // 待驗證的測試字串 let testString1 = "12345"; // 可驗證成功 let testString2 = "12a34"; // 驗證失敗 ``` test() --- 驗證回傳:boolean(布林值),成功 ```true```,失敗 ```false``` ```javascript=1 regex.test(testString1); // true regex.test(testString2); // false ``` match() --- match 為 String 物件的方法 驗證回傳:匹配結果Array(陣列),沒有匹配則回傳null ```javascript=1 testString1.match(regex); // ["12345", index: 0, input: "12345", groups: undefined] testString2.match(regex); // ["12", index: 0, input: "12a34", groups: undefined] ``` exec() --- exec 為 RegExp 物件的方法 這邊驗證規則也可改寫成RegExp物件 第二個參數"g"代表回傳所有匹配結果,沒有傳入則只會回傳第一個匹配結果 ```javascript=1 // 驗證規則:改寫成RegExp物件 const regex = new RegExp("[0-9]", "g"); ``` 驗證回傳:匹配結果Array(陣列),沒有匹配則回傳null ```javascript=1 regex.exec(testString1); // ["12345", index: 0, input: "12345", groups: undefined] regex.exec(testString2); // ["12", index: 0, input: "12a34", groups: undefined] ``` :::warning 使用 ```test``` 、 ```match``` 和 ```exec``` 的差異: ::: --- 以下為常用的驗證規則: Email 電子信箱 --- 驗證規則:==任何字元(可包含-+.符號) + @ + 任何字元 + . + 任何字元== EX: test@mail.com ```javascript= const regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; ``` 密碼 --- 驗證規則:==8~12碼 至少一個英文(大寫或小寫) + 一個數字 + 一個特殊符號(!@#$.%^&*\)== EX: abc.123abc ```javascript= const regex = /^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$.\%\^\&\*\(\)])[0-9a-zA-Z!@#$.\%\^\&\*\(\)]{8,12}/; ``` 純數字 --- 驗證規則:==數字 0~9== EX: 1234 ```javascript= const regex = /^[0-9]+$/; ``` 英數混合 --- 驗證規則:==英文大小寫 數字 0~9== EX: 12abc34 ```javascript= const regex = /^[A-Za-z0-9]+$/; ``` 中文字元 --- 驗證規則:中文字元區間 ==\u4e00 ~ \u9fa5== EX: 這是一段中文 ```javascript= const regex = /^[\u4e00-\u9fa5]+$/; ``` 台灣手機號碼 --- 驗證規則:==09開頭 + 8碼數字== EX: 0912345678 ```javascript= const regex = /^09[0-9]{8}$/; ``` 中國手機號碼 --- 驗證規則:==1開頭 + 10碼數字== EX: 11234567890 ```javascript= const regex = /^1[0-9]{10}$/; ``` 台灣身分證字號(簡易版) --- 驗證規則:==第一碼區碼大寫英文 + 第二碼性別1或2 + 8碼數字== EX: A112345678 ```javascript= const regex = /^[A-Z][12]\d{8}]$/; ``` 台灣統一編號 --- 之後補上 > 上一篇:[正規表示式:寫法規則介紹](https://hackmd.io/@eating-coding/SJzEblwkY) ###### tags: `Javascript` `前端開發筆記`