我有一个快速的正则表达式问题,我想有人可能知道他们的头顶。如果我只想允许大/小字母数字、空格、标点符号和引号,那么 CakePHP 验证的正则表达式是什么?这是我所拥有的,但它是关闭的:
'rule' => array('custom', '/[a-z0-9'x20'x21'x2E'x3A'x3B'x3F'x2C'x27'x22]{0,600}/i'),
据我所知,a-z0-9 涵盖了字母数字,但 ''xXX 不应该用 ASCII 十六进制代码覆盖标点符号吗?然后 {0,600] 表示 0-600 个字符的长度,i 表示上限和下限。我错过了什么?
例如:有效:这是一个"有效文本",其中包含 ' 和标点符号!
无效:这是一个明显的 XSS 尝试
^(['d'w's?!'.;:,'"'/'[']'(')='+-]*)$
应该工作吗?您应该提供您认为有效的文本和无效的文本的示例。
preg_match('/^(['d'w's?!'.;:,'"'/'[']'(')='+-]*)$/', $string);
只要你知道你想要它是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 个字符的限制,$ 表示字符串的结尾