2012-03-27 86 views
1

我知道這已經被問過,但我發現的所有答案在某些情況下無法正常工作。Jquery或JS:如何檢查字符串上的無效字符?

我需要驗證密碼字段,並只允許某些字符。

驗證在客戶端和服務器端完成。在PHP上,我也無法得到所需的正則表達式,所以我所做的就是將密碼拆分爲一個字符數組,然後檢查每個字符與允許的字符數組。如果任何char不在數組中,則返回false。

允許的字符是0-9,a-z,A-Z和`! '?%%& *()_ - + = {[}]:; @〜#| <,>。'/ \ 「T數字如何做到這一點。

正則表達式是無法正常工作,因爲它的時候有沒有無效字符(可能是因爲字符順序?)有時會失敗 目前正則表達式,我從這個網站得到的是

/^[A-Za-z\s`[email protected]#$%^&*()+={}|;:'",.<>\/?\\-]+$/ 

所以,有效密碼可以是,例如

urjv()$%...84 
40#"!!mbn'"{} 
890$%/\|`doc 
,-=?wht(!{})= 

在JS上有沒有其他的解決方案,或者正則表達式實際上是錯誤的?

感謝您的幫助!

+0

你可以指定其中「某些情況下」的表達不工作? – 2012-03-27 02:28:57

+0

什麼不起作用?你能給出一個有效和無效的測試樣本嗎? – Joseph 2012-03-27 02:28:59

+0

爲什麼不能應用您在PHP端使用的相同方法,並將輸入的每個字符與數組匹配? – 2012-03-27 02:31:28

回答

2

以下字符需要在字符類進行轉義:

-/[ \ ]^

需要注意的是需要轉義字符,當你創建一個使用new一個正則表達式的對象是不同的。

當他們在場時,你不會逃避這些角色,甚至有些角色甚至不包括在內。此外,當您指定不允許時,您將包含\s的空格。最後,除非我快速查看你的正則表達式,否則你不包含數字。爲了解決您所擔心的順序是導致您的正則表達式失敗的原因,順序在角色類中不相關。

校正的正則表達式:

/^[0-9a-zA-Z`!"?$%\^&*()_\-+={\[}\]:;@~#|<,>.'\/\\]+$/ 

這裏是一個 「測試套件」。我不要求它是萬無一失的,但它似乎很好地工作:

http://jsfiddle.net/radu/AvGtY/

變化查字典根據需要,你要善於去考正則表達式的大量。請注意,按照當前的設置,它只能真正檢查一致性 - 也就是說,它只檢查正則表達式是否查找字典字符串中的所有內容。

此外,您還需要檢查服務器端的密碼。您的客戶端代碼可以輕鬆繞過,因此您應該始終在服務器端進行驗證以防止出現這種情況。客戶端代碼對於即時反饋非常有用,但在這種情況下並不多。

正如Qtax指出,以下將是一個稍微短,完成同樣的事情:

/^[-0-9a-zA-Z`!"?$%&*()_+={[}\]:;@~#|<,>.'\/\\^]+$/ 
+0

這工作100%的時間!謝謝拉杜! 我可能忘記再次包括數字(我一直在嘗試更好地理解它的同時向正則表達式添加和刪除東西)。 非常感謝您的幫助。 – Ignacio 2012-03-27 03:27:28

+0

很高興我能幫到你。 – Radu 2012-03-27 03:32:55

+0

''''不需要轉義。如果放置在合適的位置,也不要放置'^'和'-'。 – Qtax 2012-03-27 04:01:35

0

它看起來像要接受除空白的所有字符。那是對的嗎?如果是這樣,你可以匹配除了與JS以下正則表達式空白的一切:

/^\S+$/​ 

例子:http://jsfiddle.net/jnQcd/2/

+1

'/^\ S + $ /'完成同樣的事情 – Radu 2012-03-27 02:49:53

+1

另外,這可以匹配更多的Unicode字符,例如¶。 – Radu 2012-03-27 02:55:11

+0

是的,除了OP只與一小組字符明確匹配外。 +1上'/^\ S + $ /' – Kai 2012-03-27 02:58:38