在js中想檢查所輸入的字串是否符合規則
可以使用.match()方法搭配正規表達式來完成
.match當字串不符合規則的時候,會回傳null值,因此我們就可以透過回傳值是否為null來判斷。
下面看幾個例子
1 2 |
var reg = /^-?\d+\.?\d*$/; //檢驗是否為數字的正規表達式(含正負數、小數點) '2018'.match(reg); //結果為非null,表示字串符合規則 |
或者也可以直接將正規表達式寫在.match()之中
1 |
'2018'.match(/^-?\d+\.?\d*$/); |
在使用.match()搭配正規表達式時,正規表示法是否有使用屬性g,會影響match回傳的結果(一般有屬性”g”、”i”和”m”,分別用於指定全局匹配、區分大小寫的匹配和多行匹配)
看下面的例子
1 2 3 4 5 6 7 |
'2 0 1 8'.match(/\d+/) //回傳["2", index: 0, input: "2 0 1 8"] 第一個匹配的字為2 '2 0 1 8'.match(/\d+/g) //增加屬性g,使用全局匹配,會回傳陣列,包含所有符合的字串。回傳值: (4) ["2", "0", "1", "8"] 'A B C D'.match(/\d+/) //回傳null 'A B C D'.match(/\d+/g) //回傳null |
另外還可以使用new RegExp()搭配.test 或.exec來檢驗字串是否符合規則。若你的正規表達式存在變數中或為一個字串,使用new RegExp()可以讓字串轉為一個正規表示法的物件。
test會回傳true或false
exec回傳null或匹配字串
1 2 3 4 5 |
var reg = new RegExp("[a-zA-Z0-9_]+@[a-zA-Z0-9\._]+"); //email正規表達式 reg.test('fwef') //回傳false reg.test('aa@gmail.com') //回傳true reg.exec('aa@gmail.com') //回傳["aa@gmail.com", index: 0, input: "aa@gmail.com"] reg.exec('fwef') //回傳null |