[英]Validate the string which needs to match particular condition(Regular Expression)?
我要驗證的字符串,除了下划線(_)之外,不應包含任何特殊字符。 為此,我編寫了以下代碼,但無法通過它。
var string = 'pro$12';
var result = /[a-zA-Z0-9_]*/.test(string);
在上面給定的字符串是無效的,但我得到的結果為true。 有人能告訴我我在做什么錯嗎?
它返回true
因為它能夠匹配pro
。 您可以使用match
函數查看實際匹配的字符串,如下所示。
console.log(string.match(/[a-zA-Z0-9_]*/));
# [ 'pro', index: 0, input: 'pro$12' ]
即使它與任何內容都不匹配,例如,您的輸入為'$ 12',它也會返回true
。 因為*
匹配0個或更多字符。 因此,它匹配之前零個字符$
在$12
。 (感謝@Jack指出 )
所以,您真正需要的是
console.log(/^[a-zA-Z0-9_]*$/.test(string));
# false
^
表示字符串的開頭, $
表示字符串的結尾。 基本上,您是在告訴RegEx引擎,從字符串的開頭和結尾匹配一個僅包含字符類中字符的字符串。
注意:您可以簡單地使用\\w
來代替使用顯式字符類[a-zA-Z0-9_]
。 它與您提到的字符類完全相同。
引用MDN文檔中的RegExp,
\\ W
匹配基本拉丁字母中的任何字母數字字符,包括下划線。 等效於
[A-Za-z0-9_]
。例如,
/\\w/
匹配'a'
在"apple,"
'5'
在"$5.28,"
和'3'
中的"3D."
因此,您的RegEx可以像這樣縮短
console.log(/^\w*$/.test(string));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.