簡體   English   中英

驗證需要匹配特定條件的字符串(正則表達式)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM