Php 如何使用循环正则表达式和数组验证十六进制颜色?
我有两个colorpicker字段,我正在使用Php 如何使用循环正则表达式和数组验证十六进制颜色?,php,regex,wordpress,validation,foreach,Php,Regex,Wordpress,Validation,Foreach,我有两个colorpicker字段,我正在使用preg\u match验证它们。这是一个工作代码,按预期进行验证看起来是这样的(我将给出第一个字段的代码,因为第二个字段基本相同): 这就是我要做的:我在第一个字段上放置了一些非颜色值,在第二个字段上放置了一些实色值,这样第一个字段上的输出将为nothing,第二个字段上的输出将为real color,反之亦然。(这是回调失败的部分。)或者我在两个字段上都放置了一些非颜色值,但在两个字段上都不返回任何内容(这是我的回调工作的部分。) 你们能帮我解决
preg\u match
验证它们。这是一个工作代码,按预期进行验证看起来是这样的(我将给出第一个字段的代码,因为第二个字段基本相同): 这就是我要做的:
我在第一个字段上放置了一些非颜色值,在第二个字段上放置了一些实色值,这样第一个字段上的输出将为nothing,第二个字段上的输出将为real color,反之亦然。(这是回调失败的部分。)
或者我在两个字段上都放置了一些非颜色值,但在两个字段上都不返回任何内容(这是我的回调工作的部分。)
你们能帮我解决这个问题吗 您使用的是
preg\u grep
,它使用数组作为输入,但您使用的是foreach的字符串。
我认为最简单的方法是使用如下代码:
$options = array('#fffAA9', '#a65c23');
foreach ($options as $value)
{
preg_match('/(#[a-f0-9]{3}([a-f0-9]{3})?)/i', $value, $matches);
if (isset($matches[1]))
{
// validated ok
var_dump($matches[1]);
}
else
{
// no match
}
}
编辑:
另外,您还可以使用preg_grep进行更简单的操作:
public function actionValidate($options)
{
// $options = array('#fffAA9', '#a65c23');
return preg_grep('/^(#[a-f0-9]{3}([a-f0-9]{3})?)$/i', $options);
}
在validate函数中,您混合了$options/$option变量。在foreach中覆盖$option变量时,不会使用该变量。
$options = array('#fffAA9', '#a65c23');
foreach ($options as $value)
{
preg_match('/(#[a-f0-9]{3}([a-f0-9]{3})?)/i', $value, $matches);
if (isset($matches[1]))
{
// validated ok
var_dump($matches[1]);
}
else
{
// no match
}
}
public function actionValidate($options)
{
// $options = array('#fffAA9', '#a65c23');
return preg_grep('/^(#[a-f0-9]{3}([a-f0-9]{3})?)$/i', $options);
}