Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP验证正则表达式_Php_Regex_Cakephp - Fatal编程技术网

CakePHP验证正则表达式

CakePHP验证正则表达式,php,regex,cakephp,Php,Regex,Cakephp,我有一个快速的正则表达式问题,我想有人可能会知道他们的头顶。如果我只想允许上/下字母数字、空格、标点和引号,那么CakePHP验证的正则表达式是什么?这就是我所拥有的,但它是关闭的: 'rule' => array('custom', '/[a-z0-9\x20\x21\x2E\x3A\x3B\x3F\x2C\x27\x22]{0,600}/i'), 据我所知,a-z0-9包含字母数字,但\xXX不应该包含ASCII十六进制代码的标点符号吗?然后,{0600]表示长度为0-600个字符

我有一个快速的正则表达式问题,我想有人可能会知道他们的头顶。如果我只想允许上/下字母数字、空格、标点和引号,那么CakePHP验证的正则表达式是什么?这就是我所拥有的,但它是关闭的:

 'rule' => array('custom', '/[a-z0-9\x20\x21\x2E\x3A\x3B\x3F\x2C\x27\x22]{0,600}/i'),
据我所知,a-z0-9包含字母数字,但\xXX不应该包含ASCII十六进制代码的标点符号吗?然后,{0600]表示长度为0-600个字符,我表示上下。我缺少什么

例如:valid:这是一个“有效文本”,包含“和标点符号!”

无效:这是明显的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字符的限制,$表示字符串的结尾

谢谢Jack,但是你能解释一下哪个部分意味着什么吗?我正在试着学习正则表达式,但一下子要学的东西很多:)还有:你的正则表达式正在引发此错误:preg_match():未找到结尾分隔符“^”[CORE/Cake/Utility/Validation.php,第781行]
^
表示字符串的开头,
$
表示字符串的结尾。它搜索整个字符串,并确保从头到尾,唯一有效的字符是数字、字母、标点符号等。您确定键入的模式正确吗?这样做不会出错
preg\u match('/^([\d\w\s?!\.;:,“\/\[\]\(\)=\+-]*)$/”,$string);
因为听起来像是php语法错误。啊,好的,我发现问题出在我的控制器上。谢谢你的帮助!