我这里只有一个测试模式,但它确实禁止空格。
$myarray[]='s s';
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$myarray)>0) echo 'yes';
这没什么,但是
$test='s s';
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$test)>0) echo 'yes';
这很好用...... 我不明白为什么它不适用于我的阵列?
答案 0 :(得分:2)
您无法在阵列上执行类似的操作。正如您在the documentation on preg_match()
中所看到的,它需要一个字符串作为第二个参数,而不是一个数组。
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
相反,您必须告诉它要对哪个元素进行操作。
如果要对数组中的一个元素执行此操作,只需使用其索引即可。例如。第一个元素是$myarray[0]
,因此以下内容应该有效:
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$myarray[0])>0) echo 'yes';
另一方面,如果您希望对阵列中的每个元素执行此操作,则可以
创建一个foreach循环
foreach ($myarray as $element) {
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$element)>0) echo 'yes';
}
使用array_map()
和回调函数
function match_callback($element) {
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$element)>0) echo 'yes';
}
array_map('match_callback',$myarray);
答案 1 :(得分:1)
preg_match不接受数组作为输入,只接受一个字符串。你需要做一些像......
$matched = no;
foreach($myarray as $x) {
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$x)>0) $matched = true;
}
if($matched) echo 'yes';
一步到位:
function preg_match_any($regex,$array) {
foreach($array as $x) {
if (preg_match($regex,$x)>0) return true;
}
return false;
}
//Then to call it just something like:
if (preg_match_any('/[^\d\w\(\)\[\]\.\-]+/',$myarray)) echo 'yes';
答案 2 :(得分:0)
您不能使用数组作为主题,因为preg_match
只接受字符串。您可以使用匿名函数(php 5.3 +):
$ret = array_map(function($element) {
return preg_replace('/[^\d\w\(\)\[\]\.\-]+/', '', $element) > 0;
}, $myarray );