3

誰かが頭のてっぺんから知っているかもしれないと私が考えた簡単な正規表現の質問があります。上下のアルファベット、スペース、句読点、引用符のみを許可したい場合、CakePHPの検証の正規表現はどうなりますか?これは私が持っているものですが、それはオフです:

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

私が得たものから、a-z0-9は英数字をカバーしていますが、\ xXXはASCIIの16進コードで句読点をカバーするべきではありませんか?そして、{0,600]は0〜600文字の長さを意味し、iは上下を意味します。私は何が欠けていますか?

例:valid:これは「有効なテキスト」であり、'と句読点が含まれています。

無効:これは明らかなXSSの試みです

4

2 に答える 2

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

動作するはずですか?有効と見なすテキストと無効なテキストの例を提供する必要があります。

preg_match('/^([\d\w\s?!\.;:,'"\/\[\]\(\)=\+-]*)$/', $string);
于 2012-04-20T05:26:08.447 に答える
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文字の制限があり、$は文字列の終わりを示します

于 2012-04-20T08:16:46.453 に答える