2009-06-16 109 views
2

我有一個字符串,我想驗證該字符串,以便它不應該包含某些字符,如'/'''''&'';'等等......我怎樣才能一次完成這一切?Javascript字符串驗證

+2

與對黑名單中不允許的字符進行檢查相比,您可能會更好地檢查字符串與允許的字符白名單,例如,只允許字母數字字符。 – 2009-06-16 09:23:03

回答

13

你可以用正則表達式解決這個問題!

mystring = "hello" 
yourstring = "bad & string" 

validRegEx = /^[^\\\/&]*$/ 

alert(mystring.match(validRegEx)) 
alert(yourstring.match(validRegEx)) 

與正則表達式的匹配返回字符串,如果它是好的,或者如果它是無效的,則返回null!

說明:

  • JavaScript的正則表達式的文字被分隔字符串一樣,但用斜槓(/的)而不是引號("的)。
  • validRegEx的第一個字符和最後一個字符使它與整個字符串匹配,而不僅僅是部分,克拉將它錨定到開頭,美元符號結束。
  • 括號內的部分([])是一個字符類,只要它在類中就匹配任何字符。其中的第一個字符,即克拉,表示該類被否定,以匹配字符類中未提及的字符。如果它已被省略,則類將匹配它指定的字符。
    • 接下來的兩個序列,\\\/是反斜線,因爲本身反斜線將是別的一個轉義序列,和正斜槓會混淆解析器以爲它已經達到了表達式的末尾, (完全類似於字符串中的轉義引號)。
    • 「&」符號(&)沒有特殊含義且未轉義。
  • 其餘的字符,該克萊尼明星,(*)意味着,無論preceeded應該匹配零次或多次,使字符類會吃那麼多字符不在向前或向後斜線或&符號,包括無法找到任何符號。如果你想確保匹配的字符串是非空的,你可以用一個加號替換它(+)。
+0

嗯......除了JavaScript正則表達式沒有`match`函數,只有`test`。 – 2016-11-16 02:02:15

5

我會使用正則表達式。

查看來自Mozillla.org的this guide。這個article也很好地介紹了JavaScript中的正則表達式。

3

Here是一篇關於Javascript驗證的好文章。請記住,您還需要在服務器端進行驗證。 Javascript驗證可以很容易地避開,所以它不應該用於安全原因,如防止SQL注入或XSS攻擊。

1

可以使用的測試方法,用正則表達式:

function validString(input){ 
    return !(/[\\/&;]/.test(input)); 
} 

validString('test;') //false 
1

可以學習正則表達式,或(可能更簡單,如果你一次只檢查一個字符),你可以有一個字符列表,然後用某種sanitize函數從字符串中刪除每個字符。

var myString = "An /invalid &string;"; 
var charList = ['/', '\\', '&', ';']; // etc... 

function sanitize(input, list) { 
    for (char in list) { 
     input = input.replace(char, ''); 
    } 
    return input 
} 

那麼接下來:

sanitize(myString, charList) // returns "An invalid string" 
0

正如其他人回答就可以解決這個與正則表達式,但記得要還檢查值服務器端。不保證用戶已激活JavaScript。永遠不要相信用戶輸入