通常在使用者填寫表單時,網頁開發者會預設一定的輸入格式,避免使用者填寫一些不符合預期的內容,導致後續資料清理上所造成的時間浪費,並且若使用者所填寫的內容,與該項目預設格式不相容,將可能導致資料傳送到後端伺服器時,出現錯誤,更是徒增維護上困難。
因此可以看到在前面的表單填寫項目中,都會有配置對應的驗證方法,以確保填寫內容符合預期格式,參考如下:
// src/components/Employee/EmployeeModal.vue
export default {
methods: {
// 各欄位驗證(配合 template 的 :class 與錯誤訊息)
validateName() {
this.nameState = this.form.name.trim() !== "";
},
validateAge() {
this.ageState = this.form.age > 0;
},
validatePhone() {
const regex = /^09\d{8}$/;
this.phoneState = regex.test(this.form.phone.toString().trim());
},
validateIdentity() {
this.identityState =
this.form.identity === "FULL" || this.form.identity === "PART";
},
validateSalaryType() {
this.salaryTypeState =
this.form.salary_type === "MONTH" || this.form.salary_type === "HOUR";
},
}
};
this.form.name.trim() !== ""
,乃先將輸入以trim()
去頭尾空白後,再檢查是否為非空字串。this.form.age > 0
,單純檢查輸入的數字是否大於0。regex.test(this.form.phone.toString().trim())
,檢查是否符合正則表達式(regular expression)所要求的格式,如regex = /^09\d{8}$/
。正則表達式於控制文字內容格式時,相當有用,語法上對於剛接觸者,會相對陌生,因此想針對正則表達式做進一部介紹。正則表達式的基本語法
// 正則字面量(regular expression literals),適合於pattern固定的場合
const regex = /pattern/flags;
const regex = /^09\d{8}$/; // 09開頭,其後接8個數字,即09xxxxxxxx
// 正則建構子(RegExp constructor),適合於需動態產生pattern時
const regex = new RegExp(pattern, flags);
const regex = new RegExp("^09\\d{8}$");
/ … /
,可視需求加上修飾符,即/pattern/flags
,適合用於pattern固定不變的情況。RegExp(pattern, flags)
。需要注意的是,採用建構子語法,反斜線符號「\」要再加一次跳脫符號「\」,即需寫為「\」。^
(標記pattern的開頭)及$
(標記pattern的結尾)符號表示,在兩個符號之間,可填入所想要規範的文字內容格式。/^09$/
,代表模式一定要是2個數字字元,且一定要為09。符號 | 意義 | 範例 |
---|---|---|
. | 任何單一字元(不含換行) | /a.c/ → "abc", "axc" ✅ |
\d | 數字(0–9 ) |
/\d/ → "5" ✅ |
\D | 非數字 | /\D/ → "a" ✅ |
\w | 英數及底線([A-Za-z0-9_] ) |
/\w/ → "A", "3" ✅ |
\W | 非英數及底線 | /\W/ → "@" ✅ |
\s | 空白字元(空格 、\t 、\n ) |
/\s/ → " " ✅ |
\S | 非空白字元 | /\S/ → "A" ✅ |
符號 | 意義 | 範例 |
---|---|---|
* | 0個或多個 | /ab*c/ → "ac", "abc" ✅ |
+ | 1個或多個 | /ab+c/ → "abc", "abbc" ✅ |
? | 0或1個 | /ab?c/ → "ac", "abc" ✅ |
{n} | 剛好n個 | /\d{4}/ → "2025" ✅ |
{n,} | 至少n個 | /\d{2,}/ → "12", "1234" ✅ |
{n, m} | n到m個 | /\d{2,4}/ → "12", "1234" ✅ |
符號 | 意義 | 範例 |
---|---|---|
[ ] | 字元集合(包起來的擇一符合) | /[abc]/ → "a", "b" or "c" ✅ |
[^] | 排除集合 | /[^abc]/ → 非 a、b、c ✅ |
( ) | 群組(包起來的需同時符合) | /(abc){2}/ → "abcabc" ✅ |
` | ` | 或(OR) |
正則表達式在初學時,不容易掌握他的要點,很容易會陷入各種符號表格的泥淖,被一堆抽象符號及對應結果搞昏頭,變成逢正則表達式必怕的惡性循環。
學習正則表達式的唯一捷徑,就是針對實例去進行查表比對,才能快速熟悉相關語法,一開始不要接觸太過複雜的表達式,先從基本的符號開始熟悉,等到看到相關語法不會覺得恐懼,就可以再去接觸進階的語法,此時網路上各種正則表達式符號的表格,才會真正對你起到幫助。