我试图在PHP中放置一个正则表达式匹配,以查找该字符串是否包含除以下字符以外的任何其他无效字符,
~!@#$%^&*()_-+=\}]{[::'"/>.<,
alpha, space, numeric
我想打印字符串,如果它包含除前面提到的字符之外的任何其他字符
ßab? - Invalid
Ba,- - Valid
我尝试使用preg_match
输入很少但无法完成输入。
任何帮助都将不胜感激。
答案 0 :(得分:3)
<强>更新强>
此表达式将匹配有效范围的负集:
$valid = preg_quote('~!@#$%^&*()_-+=\}]{[::\'"/>.<,', '/');
if (preg_match("/[^$valid\d\sA-Za-z]/", $invalid)) {
echo "invalid chars\n";
}
我在这里使用preg_quote()
来确保所有字符都被正确转义。
旧答案
我根据你的问题计算了负集:
if (preg_match('/[\x00-\x08\x0c\x0e-\x1f\x3b\x3f\x60\x7c\x7f-\xff]/', $str)) {
echo "matches invalid chars\n";
}
要获得此套装,您可以使用以下代码:
$s = '~!@#$%^&*()_-+=\}]{[::\'"/>.<,'
. join('', range('a', 'z'))
. join('', range('A', 'Z'))
. join('', range('0', '9'))
. " \t\r\v\n";
$missing = count_chars($s, 2);
print_r($missing);
它打印一组不在$s
内的序数字符代码;你可以生成以上模式。
答案 1 :(得分:0)
以下正则表达式将匹配包含特殊字符,字母,空格,数字等的任何字符串。
/^[\s\w~!@#$%^&*()+=\}\]{\[:'"\/>.<,-]*$/
^
是字符串的开头.. $
是字符串的结尾.. ^
,$
是必需的,因为它们会匹配输入完全而不是部分
[]
是一个字符类,可以匹配其中任何一个字符..
*
是一个量词,可以匹配前面的字符,组或字符类 0到很多次..