var pattern;
這邊有個需求表示要驗證電話號碼的區碼加號碼檢查. 給定的格式有兩種:
1. (zzz)nnnnnnn
2. zzz-nnnnnnn
允許匹配: 035-678989, (024)935436
為了要符合這個格式, 用天書般一樣的Regular Expression是非常簡潔的方法. 首先要拆開兩部分: 區碼, 號碼.
區碼形式: (zzz)和zzz- . 規定形式必須符合這兩種之一. 兩種之一表示或著的情況, 可以使用候選 | .
if t1=(zzz) and t2=zzz-
then t1|t2
t1與t2有一個共通點, 就是他們都是規定3區碼, 所以要符合3區碼的限制. 這是一般化規則.
1. 要符合3區碼原則.
2. 必須是數字格式.
既然是只有數字, 只有普通字元的範圍類規則是適合的, [0-9]或著\d預定義類. 另外必須要3區碼顯示. 所以可以配套量詞來展現.
zzz=\d{3}=[0-9]{3}
有了這個pattern以後, 再來的差異化就是 () 和 -. t1必須規定有 () 包住.
t1=\(\d{3}\)=(zzz)
因為 ( 和 ) 都是有意義的字元, 必須要使用拖曳字元 \ . 而t2則是zzz- 的形式.
t2=\d{3}-
我們得到了t1和t2以後, 將其帶入t1|t2的形式: \(\d{3}\)|\d{3}- . 符合了(zzz)和zzz-的兩種3區碼格式要求. 剩下的是一般化的號碼檢查. 規定只有兩種:
1. 以7碼格式為原則.
2. 必須是數字格式
在一般化的情況下, 顯得相當易懂. 使用\d{7}的表示型便可符合此兩個要求.
在3區碼和7號碼的pattern都得到以後. 這邊我考慮判定3區碼優先匹配: (t1|t2)=(\(\d{3}\)|\d{3}-) . 剩下再加入7號碼pattern. 最後成為: (\(\d{3}\)|\d{3}-)\d{7} . 這便是一個完整的pattern.
pattern=/^(\(\d{3}\)|\d{3}-)\d{7}$/;