繁体   English   中英

如何结合负正则表达式?

[英]How to combine a negative and positive regex?

我认为可以定义一个 RegExp 字符串来检查两件事 - 用户是否没有尝试输入邮政信箱以及用户是否仅使用有效字符。 两个独立的 RegExp 如下:

邮政信箱验证:

^((?!^.*(\b[Pp]([Oo0][Ss][Tt])?\.*\s*[Oo0]([Ff][Ff]([Ii][Cc][Ee])?)?\.*\s*([Bb][Oo0][Xx])\d*\s*\b.*)).)*$

用户只能输入这些字符:

^[a-z|A-Z|0-9 _&'/#]*$

当我尝试简单地将两个正则表达式与垂直“或”字符“|”连接在一起时,它没有达到预期的结果。 这甚至可能吗? 单个正则表达式可以实现两种验证吗?

如果您使用自己的正则表达式进行组合,您应该注意到第一个正则表达式实际上是一种模式,其中包含一种格式不佳的调节贪婪令牌。

看来你想要类似的东西

/^(?!.*\b[Pp]([Oo0][Ss][Tt])?\.*\s*[Oo0]([Ff][Ff]([Ii][Cc][Ee])?)?\.*\s*([Bb][Oo0][Xx])\d*\s*\b)[a-zA-Z0-9 _&'\/#]*$/
                                                                                                ^^^^^^^^^^^^^^^^^^

查看正则表达式演示

注意[az|AZ|0-9 _&'/#]不应该包含| ,因为它们被视为文字管道符号,而您很可能打算将它们用作 OR 运算符。 它们是括号内的 OR 运算符,但不是字符类内的运算符。

图案详情

  • ^ - 字符串的开始
  • (?!.*\\b[Pp]([Oo0][Ss][Tt])?\\.*\\s*[Oo0]([Ff][Ff]([Ii][Cc][Ee])?)?\\.*\\s*([Bb][Oo0][Xx])\\d*\\s*\\b) - 如果其中的模式匹配,则匹配失败的负前瞻
  • [a-zA-Z0-9 _&'/#]* - 零个或多个允许的字符
  • $ - 字符串的结尾。

由于[a-zA-Z0-9_] = \\w ,你可以写成

/^(?!.*\b[Pp]([Oo0][Ss][Tt])?\.*\s*[Oo0]([Ff][Ff]([Ii][Cc][Ee])?)?\.*\s*([Bb][Oo0][Xx])\d*\s*\b)[\w &'\/#]*$/

暂无
暂无

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

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