我知道你可以在preg_replace中使用数组,但我需要匹配2个数组。 1个数组带有禁止的字符,另一个带有我希望它找到的变量。 基本上是:
sharedPreferences.edit().putString("key", "value").apply();
如果我执行以下操作以匹配它们:
sharedPreferences.getString("key", "default_value");
然后PHP抛出以下错误
$invalidChars = array("#/#", "#\\#", "#'#", "#\"#");
$matchIn = array("var1" => $var1 , "var2" => $var2);
如果不能将preg_match与2个数组一起使用,我如何检查变量是否包含一个或多个无效的字符?
答案 0 :(得分:1)
preg_match()
只能接受字符串作为模式。它没有理由支持数组,因为可以使用单个正则表达式模式来匹配所有这些字符。
$invalidChars = "#[/\\\\'\"]#";
第二个参数也可以只是一个字符串。在这种特定情况下,您可以连接字符串以测试它们,因为您正在寻找单个字符:
if (preg_match("#[/\\\\'\"]#", implode('', $matchIn))
{
...
但通常你必须遍历主题并单独测试它们:
foreach ($matchIn as $subject)
if (preg_match("#[/\\\\'\"]#", $subject))
{
...
答案 1 :(得分:0)
试试这个功能,
function validate($invalidChars,$matchIn){
foreach($invalidChars as $invalidChar){
if(preg_match($invalidChar, $matchIn)){
echo "Invalid chars found";
return;
}
}
echo "No invalid chars";
return;
}
答案 2 :(得分:0)
我做了类似的事情。这是我用来解决该问题的代码的一些细微变化:
public function remove_value_from_array($val, &$arr) {
array_splice($arr, array_search($val, $arr), 1);
}
public function filter($invalidChars, $matchIn){
$values = array_values($matchIn);
/*Then you build the regular expression you will need for filtering.*/
/*With $invalidChars = array("#/#", "#\\#", "#'#", "#\"#"), you will get "#/#|#\\#|#'#|#\#"*/
$regex = implode("|", $invalidChars);
$filtered_values = array_filter($values, function($value) use ($regex){
preg_match ('/'.$regex.'/i', $value, $matches); return count($matches) > 0;
});
foreach($filtered_values as $value){
remove_value_from_array($value, $matchIn);
}
return $matchIn;
}
但是您需要转义$ invalidChars数组值,因为它们包含特殊字符(#,...)。