我想阻止在用户名中使用某些单词,除非它们是允许字符串的子字符串。
不允许使用love
,hug
和kiss
字词,除非在mylovely
,givehug
,kissing
中使用这些字词。
我从这种模式开始,但它不起作用:
preg_match('[love|hug|kiss]', $data)
这些是具有所需输出的一些输入:
如何实现此验证以返回true | false响应?
答案 0 :(得分:0)
当存在两个$flag
值时,我的非正则表达式方法存在潜在的缺陷,但存在一个$forgive
值,所以我希望提供一个使用带有lookbehinds和lookaheads的模式的正则表达式方法识别无效字符串:
代码(PHP Demo,Pattern Demo):
$inputs=['love','mickmackusa','kisses','mylovely','give','hug','givehug','kiss','kissing'];
foreach($inputs as $input){
echo "\n$input ";
var_export(preg_match('/kiss(?!ing)|(?<!give)hug|(?<!my)love(?!ly)/i',$input)==1?false:true);
}
输出:
love false
mickmackusa true
kisses false
mylovely true
give true
hug false
givehug true
kiss false
kissing true
旧的非正则表达式方法......
输入:
$input='code'; // mylovely(true) , give(false) , code(true)
$checks=['love'=>'mylovely','give'=>'givehug','kiss'=>'kissing'];
方法(无正则表达式):
$result=true;
foreach($checks as $flag=>$forgive){
if(stripos($input,$flag)!==false && stripos($input,$forgive)===false){
$result=false; // unforgivable word included
break;
}
}
var_export($result);
输出:
true
说明:
$checks
数组包含表示可能无效的单词的键,以及在$input
值中匹配键时允许的值。$check
元素,stripos()
用于不区分大小写地检查输入有效性。$input
被视为无效,循环就会被破坏。