我想知道用户是否在其可能的用户名字符串中的任何位置使用了admin
或username
字样。
因此,如果用户想要使用admin
,I am admin
或my admin name
或my username
作为用户名,我希望我的正则表达式能够检测到它。如果他使用adminmember
我可以忍受,那就不会发现它。我还希望检测不区分大小写。
到目前为止,我得到了这个,但它并没有像我想象的那样真正起作用,因为它会检测出不应该出现的词:
/^[admin|username]+$/i
这甚至会匹配adm
,而且不应该。我尝试过单词边界,但我也无法使它工作,也许我做错了。正如你在我的问题中所看到的,我想在字符串中的任何地方检测到单词admin,但如果它是某个单词的一部分,我可以跳过它。
提前致谢。
答案 0 :(得分:2)
正则表达式中的方括号不用于分组,它们用于指定字符类;分组是用括号完成的。您不希望使用private static int sumCuriousNumbers(int n) {
int sum = 0;
for (int i = 10; i <= n; i++)
if (isCuriousNumber(i))
sum += i;
return sum;
}
private static boolean isCuriousNumber(int number) {
int sum = 0;
for (int i = number; i > 0; i /= 10)
sum += factorial(i % 10);
return (sum % number == 0);
}
private static int factorial(int n) {
int f = 1;
for (int i = 1; i <= n; i++)
f *= i;
return f;
}
和^
锚定正则表达式,因为它只会匹配字符串的开头和结尾;您想使用$
来匹配字边界。
\b
答案 1 :(得分:1)
只需使用单词边界查找单词:
/\b(?:admin|username)\b/i
并且如果存在匹配返回错误,例如
if (preg_match('/\b(?:admin|username)\b/i', $input)) {
die("Invalid Input");
}
答案 2 :(得分:1)
请尝试使用以下代码段将您的单词列表保留在Array
。
$input = "im username ";
$spam_words = array("admin", "username");
$expression = '/\b(?:' . implode($spam_words, "|") . ')\b/i';
if (preg_match($expression, $input)) {
die("Username contains invalid value");
}
else {
echo "Congrats! is valid input";
}
工作小提琴网址:
http://sandbox.onlinephpfunctions.com/code/6f8e806683c45249338090b49ae9cd001851af49
答案 3 :(得分:0)
这可能是您正在寻找的模式:
'#(^|\s){1}('. $needle .')($|\s|,|\.){1}#i'
某些细节取决于您要应用的限制。