我想使用PHP函数preg_match和JS函数test来排除包含以下字符的字符串:|,+,--,=,<,>,!=,(,),%,*
你能给我这个表达的正确模式吗?
现在我使用这个解决方案:
pattern = /[+|=|<|>|(|)|%|*]/;
if( pattern.test(mystring) )
{
alert(.....);
}
但如果我使用,它就不起作用
pattern = /[+|=|<|>|(|)|%|*|--|!=]/;
if( pattern.test(mystring) )
{
alert(....);
}
因为它不接受单数-或
对于想要/[+=<>()%*|]|'!=|-{2}/
的JavaScript,用法:
new RegExp(/[+=<>()%*|]|!=|-{2}/).test('this!=that');
在PHP '/[+=<>()%*|]|!=|-{2}/'
中,用法:
preg_match('/[+=<>()%*|]|!=|-{2}/','this!=that');
不需要将|
(或运算符)放在[]
(字符类)中,除非您想匹配特定的字符——这是假设的。还要注意,字符类不能包含字符序列;您需要将这些短语分解,并使用|
来分隔这些短语。以下是正则表达式的分解:
/
-起始分隔符[+=<>()%*|]
-匹配此处的任何字符(单数)|
-匹配左边的内容(字符类)或右边的内容(短语)!=
-完全匹配!=(短语)|
-再次匹配左侧(短语)或右侧(短语)-{2}
-与连字符完全匹配两次(带量词的短语)/
-结束分隔符
从高层来看,可以解释如下:
A|B|C
,A或B或C匹配- 则A为
[D]
,其中任何字符D
匹配 - 则D为
+=<>()%*|
- 则B为
!=
- 则C是
E{2}
或EE
(由于量词{n}
而相同) - 则E为
-
现在使用您的变量和正则表达式实例化样式:
JS:
var pattern = /[+=<>()%*|]|!=|-{2}/;
if( pattern.test(mystring) )
{
console.log(...);
}
PHP:
$pattern = '/[+=<>()%*|]|!=|-{2}/';
if ( preg_match($pattern,$mystring) )
{
var_dump(...);
}
奖励:看看正则表达式中必须转义哪些特殊字符?关于哪些字符需要转义以及在什么上下文中转义-在您的情况下,没有任何字符,但仍然是一个方便的参考
首先,如果您使用的是[ ]
,则不需要|
-方括号表示与其中任何一个字符匹配。
要包括-
,只需引用'
:
var pattern = /[+=<>()%*'-!=|]/;
编辑—我读你的问题太草率了。要处理!=
和--
,必须将它们分解为单独的子模式:
var pattern = /[+=<>()%*|]|(!=)|(--)/;
您需要使用反斜杠转义特殊字符(例如,括号)。
在这两种情况下,您的模式都不正确。如果要使用正则表达式测试包含这些字符的字符串,只需使用[+=<>()|&!*-]
即可。这就是你写一个字符组的方式——你不需要在每个字符之间放条。如果您希望您的组包含-
,请始终将其放在最后(否则,它可能会被混淆为a-z
或0-9
等字符范围的一部分)。