【问题标题】:REGEX: How Do I Write a Negative REGEX for a HTML Pattern value?正则表达式:如何为 HTML 模式值编写负正则表达式?
【发布时间】:2020-11-06 08:44:43
【问题描述】:

我目前有一个联系表单,我拒绝包含电子邮件地址和 URL 的文本字段中的值。我在 Rails 控制器中使用这些 REGEX 表达式。我想复制它并在我的 HTML 模式字段中使用它。

regex_email   = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/   
regex_url     = /^(http|ftp|https)|[.][a-zA-Z][a-zA-Z]/
regex_message = /seo|captcha|sales|Б|Г|Д|ё|Ж|П|Ф|И|й|Л|Ц|Ш|Щ|Э|Ю|Я/i
regex_all     = /#{regex_email}|#{regex_url}|#{regex_message}/i

我已经为 regex_url、regex_message 和 regex_url 创建了区域设置哈希。我想否定软管值,然后添加某种类型的 AND 运算符,并使用下面的示例作为我的模式。

"data-pattern" => "NOT#{regex_email}AND NOT#{regex_url}AND NOT#{regex_message}"

无论是这个还是类似的东西,我的哈希的否定被添加到哈希本身。

"data-pattern" => "#{regex_email}AND#{regex_url}AND#{regex_message}"

我搜索了很多关于 AND 和 NOT 的链接,但讨论不是很清楚。

我问这个问题是因为我没有成功编写只包含字母、数字、句点或连字符的正则表达式。当我包含 .在我的正则表达式中。我什至尝试逃避它,但它仍然匹配。

【问题讨论】:

  • 如果您在客户端的 HTML 模式字段中设置它,它可以被禁用。根据防止输入这些项目对您的重要性,最好将其保留在服务器端。
  • 确实如此。我的代码有效。

标签: regex ruby-on-rails-5 regex-negation


【解决方案1】:

假设您的表达式 regex_email、regex_url 和 regex_message 工作可靠,并且您正在寻找 regex_all 的逻辑否定 正则表达式级别上的模式(这就是我理解您的问题的方式)。
您可以使用稍作修改的 负前瞻 逻辑,如下所示:

/^(?!.*#{regex_email})(?!.*#{regex_url})(?!.*#{regex_message})/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多