我想抓住那不是字母,数字或任何字符。-_(周期,短划线,下划线)PHP的preg_match表达不匹配正确的字符
我的代码是
return !preg_match('/[^A-Za-z0-9.-_]/', $strToFilter);
我希望当它找到一个无效的字符时它会返回错误。到目前为止它允许._(句号和下划线)但不允许 - (短划线)。它也不会检测//\,[,],%,^等字符作为无效字符。
我的表情有什么问题?
我想抓住那不是字母,数字或任何字符。-_(周期,短划线,下划线)PHP的preg_match表达不匹配正确的字符
我的代码是
return !preg_match('/[^A-Za-z0-9.-_]/', $strToFilter);
我希望当它找到一个无效的字符时它会返回错误。到目前为止它允许._(句号和下划线)但不允许 - (短划线)。它也不会检测//\,[,],%,^等字符作为无效字符。
我的表情有什么问题?
在正则表达式字符类,你不能,除非它是匹配一个连字符:
^
)或\
)连字符可以包含在右括号之后,或者在右括号之前,或者在否定脱字符之后。 [-x]和[x-]都匹配x或连字符。 [^ -x]和[^ x-]匹配任何不是x或连字符的字符。这适用于本教程讨论的所有风格。字符类别中其他位置的连字符不能形成范围,可能会被解释为文字或错误。正则表达式的风格对此很不一致。
Source - 见元字符内字符类。
只是逃避破折号:
return !preg_match('/[^A-Za-z0-9.\-_]/', $strToFilter);
立即反对括号或否定插入符号不是唯一的解决方案。如果您添加转义到您的答案+1 ;-) –