【问题标题】:Regex for a comma delimited string containing certain letters only仅包含某些字母的逗号分隔字符串的正则表达式
【发布时间】:2015-08-12 04:02:24
【问题描述】:

正在创建一个测试此模式的 javascript 正则表达式:a, b, c, etc.. 带有某些字母。

换句话说,用逗号分隔的字母在逗号后加一个空格。至少需要一个字母才能通过测试,但之后可以有无限多的字母。

到目前为止我有这个:

/[cdefgab]+(, [cdefgab]+)*/

但我无法按照描述的方式运行它。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    如果您需要用逗号和空格分隔的字母序列,您应该使用这个正则表达式:

    /[cdefgab](, [cdefgab])*/
    

    在您的正则表达式中,如果只有一个字母,则不需要 + 量词。

    这是a DEMO

    编辑:

    如果它的目的是匹配一个字母一个用逗号分隔的字母序列,因此您需要使用 {1} 来精确匹配一次,那么您的正则表达式应该是这样的:

    /[cdefgab]{1}(, [cdefgab])*/
    

    EDIT2:

    要完全匹配所需的字符序列并相应地启用/禁用提交按钮,您应该将此正则表达式 /^[cdefgab]{1}(, [cdefgab])*$/) 与输入的 keyup 事件一起使用,这是一个 DEMO:

    var validateInput = function validateInput(input) {
      var submitButton = document.getElementById("submitButton");
      if (input.value.match(/^[cdefgab]{1}(, [cdefgab])*$/)) {
    
        console.log("matches");
        submitButton.disabled = false;
    
      } else {
    
        console.log("Unmatches");
        submitButton.disabled = "disabled";
      }
    }
    Text:
    <input type="text" id="txt" onkeyup="validateInput(this);" />
    <input type="submit" id="submitButton" disabled/>

    【讨论】:

    • 好的,但我需要做的是不允许提交表单,除非它完全匹配。看来,一旦我正确启动了序列,然后放置一个它仍然通过的数字。这应该发生吗?
    • @StackJuice 不,这不应该发生,请编辑问题以包含您的整个验证代码?
    • 我想你差不多了。假设我以大写的“C”开始,按钮被禁用,这是我想要的,但是一旦我输入小写的“a”,它就会被禁用。我需要禁用它,除非它完全匹配。这有帮助吗?
    • @StackJuice2 看看我的最后一个编辑,它会给你你所需要的。
    【解决方案2】:
    /[a-z](, [a-z])*/
    

    这需要至少一个字母,然后可以有任意数量的字母(0 个或多个),前面有一个逗号和一个空格。

    编辑:如果您只查找特定字母,请将 [a-z] 的实例替换为您要查找的字母,并用方括号括起来。即[cefg]

    【讨论】:

    • 太棒了。我按照你的建议做了,但是当我输入一个字母,然后是一个句号或破折号时,它仍然通过。它只能是逗号,并且后面有一个空格。我错过了什么?
    • 括号内不需要管道!
    • 已更新,感谢@chsdk。 @Stack Juice2,你能给出一个示例字符串吗?如果您想排除字符,则变得更加困难,因为正则表达式 ([a-z]) 的开头在技术上将“传递”任何包含字母的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2012-08-23
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多