[英]Javascript and PHP Regular Expression to exclude different chars
我想使用PHP函数preg_match和JS函数测试来排除具有以下字符的字符串:|,+,-,=,<,>,!=,(,),%,*
您能给我这种表达的正确模式吗?
现在我使用此解决方案:
pattern = /[+|=|<|>|(|)|%|*]/;
if( pattern.test(mystring) )
{
alert(.....);
}
但是,如果我使用它是行不通的:
pattern = /[+|=|<|>|(|)|%|*|--|!=]/;
if( pattern.test(mystring) )
{
alert(....);
}
因为它不接受单数-或!
首先,您不需要|
如果使用[ ]
,则方括号表示与其中任何一个字符匹配。
要包含-
只需用\\
引用:
var pattern = /[+=<>()%*\-!=|]/;
编辑 -我在阅读您的问题时过于草率。 要处理!=
和--
,必须将它们分解为单独的子模式:
var pattern = /[+=<>()%*|]|(!=)|(--)/;
对于JavaScript,您需要/[+=<>()%*|]|\\!=|-{2}/
,用法:
new RegExp(/[+=<>()%*|]|!=|-{2}/).test('this!=that');
并且在PHP '/[+=<>()%*|]|!=|-{2}/'
,用法:
preg_match('/[+=<>()%*|]|!=|-{2}/','this!=that');
无需放|
(或运算符)在您的[]
(字符类)中,除非您想匹配该特定字符-这是假定的。 还要注意,字符类不能包含字符的序列/系列。 您需要将其分解并使用|
分隔短语。 这是正则表达式的细分:
/
-开始定界符 [+=<>()%*|]
-匹配此处的任何字符(单数) |
-匹配左侧的内容(字符类)或右侧的内容(词组) !=
-完全匹配!=(词组) |
-再次匹配左侧(短语)或右侧(短语)的内容 -{2}
-连字号精确匹配两次(短语带有量词) /
-结束定界符 从高层次上,它可以解释为:
A|B|C
,A或B或C匹配 [D]
,其中任何字符D
匹配 +=<>()%*|
!=
E{2}
或EE
(由于量词{n}
)。 -
现在使用您的变量和正则表达式实例化样式:
JS:
var pattern = /[+=<>()%*|]|!=|-{2}/;
if( pattern.test(mystring) )
{
console.log(...);
}
PHP:
$pattern = '/[+=<>()%*|]|!=|-{2}/';
if ( preg_match($pattern,$mystring) )
{
var_dump(...);
}
奖励:看看正则表达式中必须转义哪些特殊字符? 关于哪些字符需要转义以及在什么情况下-在您的情况下,这些字符都不存在,但仍然是方便的参考!
您需要使用反斜杠转义特殊字符(例如,括号)。
在两种情况下,您的模式都不正确。 如果要使用正则表达式测试包含这些字符的字符串,请使用[+=<>()|&!*-]
。 这就是您编写字符组的方式-您不必在每个字符之间放置小节。 如果要让组包含-
,请始终将其放在最后(否则它可能会混淆为az
或0-9
类的字符范围的一部分)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.