我在数组中存储了一系列禁止的单词:
$bad = array("test");
我使用以下代码检查用户名:
if (in_array ($username, $bad))
{
//deny
}
但是我有一个问题,它只是否认给定的用户名是否完全是测试,但是如果给定的用户名是Test,TEST,thisisatestok或ThisIsATestOk,我也希望它也拒绝。
有可能吗?
答案 0 :(得分:2)
虽然其他答案使用正则表达式和preg_*
系列,但您最好使用stripos()
,因为bad practice仅使用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";
}
答案 1 :(得分:2)
通过使用不区分大小写的正则表达式过滤数组中的每个单词,可以得到包含针的单词列表。
<?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
)
答案 2 :(得分:1)
$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;
}
}
使用子字符串和不区分大小写。
答案 3 :(得分:0)
您可以使用 strtolower()
$words = array('i', 'am', 'very', 'bad');
$username = "VeRy";
$un = strtolower($username);
if (in_array($un, $words)){
//found !
}