繁体   English   中英

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

[英]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匹配
  • 那么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(...);
}

奖励:看看正则表达式中必须转义哪些特殊字符? 关于哪些字符需要转义以及在什么情况下-在您的情况下,这些字符都不存在,但仍然是方便的参考!

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

在两种情况下,您的模式都不正确。 如果要使用正则表达式测试包含这些字符的字符串,请使用[+=<>()|&!*-] 这就是您编写字符组的方式-您不必在每个字符之间放置小节。 如果要让组包含- ,请始终将其放在最后(否则它可能会混淆为az0-9类的字符范围的一部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM