2012-04-20 27 views
3

我有一個快速的正則表達式問題,我想有人可能知道他們的頭頂。如果我只想允許上/下字母數字,空格,標點符號和引號,那麼CakePHP驗證的正則表達式是什麼?這是我有什麼,但它的關閉:CakePHP驗證正則表達式

'rule' => array('custom', '/[a-z0-9\x20\x21\x2E\x3A\x3B\x3F\x2C\x27\x22]{0,600}/i'), 

從我得到的一個-Z0-9涵蓋字母,但不應該在\ XXX支付與ASCII十六進制代碼標點符號?然後{0,600]表示長度爲0-600個字符,我的意思是上下。我錯過了什麼?

例如:valid:這是一個「有效文本」,其中包含'和標點符號!

無效:這是一個明顯的XSS嘗試

回答

3
^([\d\w\s?!\.;:,'"\/\[\]\(\)=\+-]*)$ 

應該工作?您應該提供您認爲哪些文本有效且哪些無效的示例。

preg_match('/^([\d\w\s?!\.;:,'"\/\[\]\(\)=\+-]*)$/', $string); 
+0

謝謝傑克,但你能解釋哪部分意味着什麼?我試圖學習正則表達式,但它是一次學習很多:) – 2012-04-20 05:36:05

+0

另外:你的正則表達式拋出這個錯誤:preg_match():沒有結束分隔符'^'找到[核心/蛋糕/效用/ Validation.php, 781行] – 2012-04-20 05:40:46

+0

「^」表示字符串的開始,「$」表示字符串的結尾。它搜索整個字符串,並確保從頭到尾,唯一有效的字符是數字,字母,標點符號等。 – Jack 2012-04-20 05:43:32

1

只要你知道你希望它是ASCII碼,只要用字符範圍

$input = "this is a \n string\n"; 
echo preg_match("/^[ -~]{0,600}$/", $input); // output is 0 (false) 
$input = "this is a string"; 
echo preg_match("/^[ -~]{0,600}$/", $input); // output is 1 (true) 

每當我處理ASCII我找到特定的範圍要容易得多。 所以基本上你希望字符串的開始是空格內的任何東西,而這些都是可見的字符。然後你有一個0-600字符的限制,$表示字符串的末尾

+0

謝謝,這是一個很好的使用方法! – 2012-04-20 15:24:11