你的代碼沒有問題。只有你的期望是有點關閉。
的RegExp.test()
說明文檔中提到:
使用test()
,每當你想知道的模式是否在字符串中找到(類似於String.prototype.search()
方法[...])
的test()
方法不會驗證您的整個字符串是否與正則表達式匹配,但只有匹配它的子字符串。
在其當前形式中,您的代碼檢查如果字符串包含從所述範圍內的至少一個字符(字母,數字,或減短劃線)。
如果您需要檢查匹配對整個字符串,你應該使用boundaries(也許一quantifier):
/^[a-zA-Z0-9_-]+$/
^
字符串的開頭匹配;
$
匹配字符串的結尾;
+
表示之前的表達式匹配一次或多次;以前的表達式是[...]
範圍。
此更新後的表達式與僅包含字母,數字,破折號和小數且不爲空的字符串匹配;使用*
而不是+
以允許空字符串; *
使以前的表達式匹配零次或多次。
更新:
一個更好的辦法是把^
爲範圍的第一個字符並解釋由test()
周圍的其他方法的返回值。 ^
否定範圍塊的含義([...]
)。 [^a-zA-Z0-9_-]
匹配任何不是字母,數字,短劃線或逗號的字符。
我需要返回false
當字符串只包含字符從a
到z
較低和大寫字母,數字和_
和-
。
的正則表達式/[^a-zA-Z0-9_-]/
是有效的滿足您的需求(它至少包含一個字符不能是字母,數字,破折號或逗號)匹配的字符串。
var re = /[^a-zA-Z0-9_-]/
alert('Valid: ' + re.test('EKyirtVHsK0')); // false
alert('Valid: ' + re.test('!%!irtVHsK0')); // true
你要逃避'-'字符類 – hindmost
@hindmost內:只有在一個位置,它可以形成一個範圍內使用。也就是說,不是在字符類的開始/結束處,而是在有效範圍之後。 –
你說過,當字符串只包含數字,a-z,'_'和'-'時,你應該得到'false'。你的例子中的字符串也包含其他字符,所以它應該像返回true一樣。它不應該返回'false'。 –