早上好.我正在尝试确定字符串是否包含特定字符列表.
我知道我应该使用preg_match,但我的正则表达式知识很糟糕,我无法收集本网站其他帖子的任何信息.因为大多数人只想将字符串限制为az,AZ和0-9.但我确实希望允许一些特殊字符,例如:! @ £和其他不在下面的字符串中.
要匹配的字符: # $ % ^ & * ( ) + = - [ ] \ ' ; , . / { } | \ " : < > ? ~
private function containsIllegalChars($string)
{
return preg_match([REGEX_STRING_HERE], $string);
}
Run Code Online (Sandbox Code Playgroud)
我最初在Javascript中编写匹配,它只是循环遍历字符串中的每个字母,然后循环遍历另一个字符串中的每个字符,直到找到匹配项.回想起来,我简直无法相信我甚至试图使用这种古老的方法.随着json的出现(以及应用程序的重写!),我将匹配切换到php,通过json返回错误消息.
我希望正则表达式大师可以协助将上面的字符串转换为正则表达式字符串,但任何反馈都将不胜感激!
Tou*_*uki 13
用于"不允许字符列表"的正则表达式不是强制性的.
你可以看看strpbrk.它应该完成你需要的工作.
这是一个使用示例
$tests = array(
"Hello I should be allowed",
"Aw! I'm not allowed",
"Geez [another] one",
"=)",
"<WH4T4NXSS474K>"
);
$illegal = "#$%^&*()+=-[]';,./{}|:<>?~";
foreach ($tests as $test) {
echo $test;
echo ' => ';
echo (false === strpbrk($test, $illegal)) ? 'Allowed' : "Disallowed";
echo PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
return preg_match('/[#$%^&*()+=\-\[\]\';,.\/{}|":<>?~\\\\]/', $string);
Run Code Online (Sandbox Code Playgroud)