我想使用PHP函数 preg_match 和JS函数 test 来排除带有此字符的字符串:|,+, - ,=,<,>,!=,(,),%,*
你能给我这个表达的正确模式吗?
现在我使用这个解决方案:
pattern = /[+|=|<|>|(|)|%|*]/;
if( pattern.test(mystring) )
{
alert(.....);
}
但如果我使用它,它就不起作用了:
pattern = /[+|=|<|>|(|)|%|*|--|!=]/;
if( pattern.test(mystring) )
{
alert(....);
}
因为它不接受单数 - 或!
答案 0 :(得分:1)
首先,如果您使用|
,则不需要[ ]
- 方括号表示与内部任何一个字符匹配。
要包含-
,只需引用\
:
var pattern = /[+=<>()%*\-!=|]/;
编辑 - 我在阅读你的问题时非常仓促。要处理!=
和--
,必须将它们分解为单独的子模式:
var pattern = /[+=<>()%*|]|(!=)|(--)/;
答案 1 :(得分:1)
对于JavaScript,您需要/[+=<>()%*|]|\!=|-{2}/
,用法:
new RegExp(/[+=<>()%*|]|!=|-{2}/).test('this!=that');
在PHP '/[+=<>()%*|]|!=|-{2}/'
中,用法:
preg_match('/[+=<>()%*|]|!=|-{2}/','this!=that');
除非您想匹配该特定字符,否则无需将|
(或运算符)放在[]
(字符类)中 - 这是假定的。另请注意,字符类不能包含序列/系列字符;你需要打破这些并使用|
分隔短语。以下是正则表达式的细分:
/
- start delimiter [+=<>()%*|]
- 匹配此处的任何字符(单数)|
- 匹配左边的内容(字符类)或右边的内容(短语)!=
- 完全匹配!=(词组)|
- 再次匹配左侧(短语)或右侧(短语)-{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(...);
}
奖励:看一下What special characters must be escaped in regular expressions?关于哪些角色需要转义以及在什么情况下 - 在你的情况下,没有一个,但仍然是一个方便的参考! < / p>
答案 2 :(得分:0)
您需要使用反斜杠转义特殊字符(例如,括号)。
答案 3 :(得分:0)
在这两种情况下,您的模式都不正确。如果要使用正则表达式来测试包含这些字符的字符串,请使用[+=<>()|&!*-]
。这就是你编写一个字符组的方法 - 你不要在每个字符之间放置条形图。如果您希望您的论坛包含-
,请始终将其放在最后(否则可能会将其混淆为a-z
或0-9
等字符范围的一部分。