2012-08-23 43 views
6

我想驗證一個textarea,我只是沒有得到正則表達式(它花了我一天和一堆教程找出)。正則表達式:允許一些選定的字符

基本上我希望能夠允許一切(包括換行符和戰車),但可能是惡意的(可能導致安全漏洞的)字符。 由於很少有不允許的字符,我認爲創建黑名單比白名單更有意義。

我的問題是:在正則表達式中什麼是標準的「一切除了」?

我正在使用JavaScript和jQuery。

我試過,但它不工作(這太可怕了,我知道..):

var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#§-_ \n\r]+$/; 

謝謝。

+1

你是什麼意思不起作用字符的十六進制代碼一起?什麼是使用該正則表達式的代碼? –

+4

這不會爲安全做任何事情。表單可以在不使用JavaScript的情況下提交,甚至不使用瀏覽器(因爲它只是某種類型的HTTP請求)。 – Esailija

+1

正則表達式並不是真正的安全漏洞的正確方法。這[線程](http://stackoverflow.com/questions/24723/best-regex-to-catch-xss-cross-site-scripting-attack-in-java)可能會感興趣。針對XSS的防禦不是用正則表達式完成的。 – sQVe

回答

1

正如Esailija所說,這對於真正的安全性不會做任何事情。

你提到的代碼幾乎是一個否定集,如murgatroid99提到的那樣,^進入括號內。所以正則表達式將匹配不在該列表中的任何內容。但它看起來像你真的想刪除這些字符,所以你的正則表達式不需要被否定。

您的代碼應該是這樣的:

str.replace(/[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#-_ \n\r]/g, ""); 

,說,刪除我的正則表達式中的所有字符。

但是,這就是說你不想保留a-zA-Z0-9你確定要刪除那些嗎?

此外,鍍鉻不喜歡正則表達式§,你必須使用\x

+0

基本上,我想讓這些角色(這是一個很大的集合,但它意味着稍後會減輕一些重量)。謝謝你的解釋 – Baylock

15

如果要排除一組字符(某些標點字符,例如),您將使用^運營商在一個字符集的開始,在正則表達式像

/[^.?!]/ 

這個匹配字符那不是.,?!

+0

感謝您的回答 – Baylock

+2

關於堆棧溢出,我們通常更傾向於使用投票而不是評論來說問題很有用,因爲這樣的評論通常被認爲是噪聲,而投票則對其他人更有用。 – murgatroid99

+0

是的,我這樣做的原因是我不知道如何在這裏投票。我所擁有的是檢查綠旗的能力。但是隻允許一個國旗和太多好的答案。我試圖弄清楚這件事,但仍然沒有線索。 – Baylock

6

您可以使用^爲括號內[]的第一個字符來否定什麼在它:

/^[^abc]*$/ 

這意味着:「從開始到結束,沒有ab,或c。」

+0

之前感謝您的解釋! – Baylock

相關問題