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


Javascript and PHP Regular Expression to exclude different chars

我想使用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-z0-9等字符范围的一部分)。