我正在一个数组中存储一系列禁用词:
$bad = array("test");
我正在使用以下代码来检查用户名是否匹配:
if (in_array ($username, $bad))
{
//deny
}
但是我有一个问题,它只会拒绝给定的用户名为test,但我希望它也能拒绝给定的用户名为Test、TEST、thisisatestok或ThisIsATestOk。
这可行吗?
我正在一个数组中存储一系列禁用词:
$bad = array("test");
我正在使用以下代码来检查用户名是否匹配:
if (in_array ($username, $bad))
{
//deny
}
但是我有一个问题,它只会拒绝给定的用户名为test,但我希望它也能拒绝给定的用户名为Test、TEST、thisisatestok或ThisIsATestOk。
这可行吗?
stripos()
,因为仅仅为了查找字符串中的某些内容而使用preg_*
函数是不好的编程实践,而且stripos
的速度更快。然而,stripos
并不能接受针的数组作为参数,所以我写了一个函数来完成这个任务:function stripos_array($haystack, $needles){
foreach($needles as $needle) {
if(($res = stripos($haystack, $needle)) !== false) {
return $res;
}
}
return false;
}
如果找到匹配项,此函数将返回偏移量,否则返回false。
示例案例:
$foo = 'evil string';
$bar = 'good words';
$baz = 'caseBADcase';
$badwords = array('bad','evil');
var_dump(stripos_array($foo,$badwords));
var_dump(stripos_array($bar,$badwords));
var_dump(stripos_array($baz,$badwords));
# int(0)
# bool(false)
# int(4)
使用示例:
if(stripos_array($word, $evilwords) === false) {
echo "$word is fine.";
}
else {
echo "Bad word alert: $word";
}
<?php
$haystack = array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday');
$needle = 'DAY';
$matches = array_filter($haystack, function($var){return (bool)preg_match("/$needle/i",$var);});
print_r($matches);
输出:
Array
(
[0] => sunday
[1] => monday
[2] => tuesday
[3] => wednesday
[4] => thursday
[5] => friday
[6] => saturday
)
$example = array('An example','Another example','One Example','Last example');
$searchword = 'last';
$matches = array();
foreach($example as $k=>$v) {
if(preg_match("/\b$searchword\b/i", $v)) {
$matches[$k] = $v;
}
}
你可以使用 strtolower()
$words = array('i', 'am', 'very', 'bad');
$username = "VeRy";
$un = strtolower($username);
if (in_array($un, $words)){
//found !
}
strpos
作为示例,或者阅读有关正则表达式和preg_*
函数的内容。 - u_mulder