【问题标题】:RegEx - Excluding characters and minimum count of lettersRegEx - 排除字符和最小字母数
【发布时间】:2026-01-06 23:00:01
【问题描述】:

我在输入标签中写了一个带有 pattern 的 javascript 表单验证。

我想在任何地方都排除这些符号 ['{}$?!"] 并希望至少包含 3 个字母 [a-z]{3,}。应该允许其他所有字符。(可能像 .*)

我的问题是它只排除了字母前的符号,而忽略了字符串中间或末尾的符号。

<input type="text"
       name="name"
       maxlength=50
       pattern="^[^'<>{}$?!\x22]+[a-z]{3,}.*$"
       onChange="changi(this.parentNode.parentNode.id)"
       required /> 

例如应该是:

正确:

  • John Doe the 3.
  • 约翰·多伊

错误:

  • !!约翰·多伊三世。
  • 约翰·多伊!! (允许自动取款机)
  • 乔! Do!e(允许自动取款机)

【问题讨论】:

    标签: html regex regex-negation


    【解决方案1】:

    您可以使用正向预测

    ^(?=(?:.*[a-z]){3})[^'<>{}$?!\x22]+$
    

    Regex Demo


    function handle() {
      alert('submitted')
    }
    <form onsubmit='handle()'>
      <input type='text' pattern="^(?=(?:.*[a-z]){3})[^'<>{}$?!\x22]+$"></input>
    </form>

    注意:- \n inside characters class in regex demo 仅用于说明目的,在输入不需要的情况下使用

    【讨论】:

    • 图表从何而来?
    • @EnricoMariaDeAngelis 这被称为正则表达式可视化工具,您可以查看我用来生成上述图像的jex.im