我正在尝试在 PHP 中进行正则表达式匹配,以查找字符串是否包含除以下字符之外的任何其他无效字符,
~!@#$%^&*()_-+=\}]{[::'"/>.<,
alpha, space, numeric
如果字符串包含除前面提到的字符之外的任何其他字符,我想打印该字符串
ßab? - Invalid
Ba,- - Valid
我尝试使用preg_match
少量输入但无法完成它。
任何帮助,将不胜感激。
我正在尝试在 PHP 中进行正则表达式匹配,以查找字符串是否包含除以下字符之外的任何其他无效字符,
~!@#$%^&*()_-+=\}]{[::'"/>.<,
alpha, space, numeric
如果字符串包含除前面提到的字符之外的任何其他字符,我想打印该字符串
ßab? - Invalid
Ba,- - Valid
我尝试使用preg_match
少量输入但无法完成它。
任何帮助,将不胜感激。
更新
此表达式将匹配您的有效范围的负数集:
$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
;有了它,您可以生成上述模式。
下面的正则表达式将匹配任何包含您的特殊字符、字母、空格、数字的字符串。
/^[\s\w~!@#$%^&*()+=\}\]{\[:'"\/>.<,-]*$/
^
是字符串的开头..$
是字符串的结尾.. ^
,$
是必需的,因为它们将完全匹配输入而不是部分匹配
[]
是一个字符类,它将匹配其中的任何一个字符..
*
是一个量词,它将匹配前面的字符、组或字符类0多次..