Javascript和PHP正则表达式排除不同的字符

时间:2013-11-30 17:29:51

标签: javascript php regex

我想使用PHP函数 preg_match 和JS函数 test 来排除带有此字符的字符串:|,+, - ,=,<,>,!=,(,),%,*

你能给我这个表达的正确模式吗?

现在我使用这个解决方案:

    pattern = /[+|=|<|>|(|)|%|*]/;
    if( pattern.test(mystring) )        
    {
        alert(.....);   
    }

但如果我使用它,它就不起作用了:

pattern = /[+|=|<|>|(|)|%|*|--|!=]/;
if( pattern.test(mystring) )        
{
 alert(....);
}

因为它不接受单数 -

4 个答案:

答案 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匹配
  • 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(...);
}

奖励:看一下What special characters must be escaped in regular expressions?关于哪些角色需要转义以及在什么情况下 - 在你的情况下,没有一个,但仍然是一个方便的参考! < / p>

答案 2 :(得分:0)

您需要使用反斜杠转义特殊字符(例如,括号)。

答案 3 :(得分:0)

在这两种情况下,您的模式都不正确。如果要使用正则表达式来测试包含这些字符的字符串,请使用[+=<>()|&!*-]。这就是你编写一个字符组的方法 - 你不要在每个字符之间放置条形图。如果您希望您的论坛包含-,请始终将其放在最后(否则可能会将其混淆为a-z0-9等字符范围的一部分。