【问题标题】:Combine regular expression together in OR?在 OR 中将正则表达式组合在一起?
【发布时间】:2012-01-13 12:46:59
【问题描述】:

我正在测试 input class="k" 是否包含 HTML ID 属性的有效字符,如果不是,则显示 alert

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,并且可以是 后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、 下划线(“_”)、冒号(“:”)和句点(“.”)。

我想在逻辑 OR 中结合这两个正则表达式。 有没有办法将它们组合成一个正则表达式?

$('.k').keyup(function(){
   if((/^[\d]/).test($(this).val())) alert('Not valid!');
   if((/[\s]/).test($(this).val()))  alert('Not valid!');
});

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    管道是 RegEx 中的逻辑 OR。在这种情况下,不需要括号。但是,通常,您希望对子模式进行分组:

    /(^\d|\s)/
    

    ID 的模式 (\w = [a-zA-Z0-9_]):

    /^[a-zA-Z][\w:.-]*$/
    

    【讨论】:

    • 请注意,\w 在每个正则表达式引擎中不一定限于[A-Za-z_]。最好在此处具体说明。
    • @Tomalak 你的意思是\w在javascript中并不总是[a-zA-Z0-9_]的缩写?
    • @Gremo 不确定——它在 Java 正则表达式中,但对于其他语言,\w 取决于区域设置。
    • @Gremo 在 JavaScript 中,\w 等于 [a-zA-Z0-9_]。在其他 RegEx 解释器中,\w 还可以包含变音符号。
    【解决方案2】:

    正如您知道 ID 或 NAME 令牌必须精确匹配的内容,您可以编写一个正则表达式来仅匹配有效的:

    ^[A-Za-z]([-\w:.])*$
    

    如果输入不匹配,则匹配无效(注意:\w 匹配数字和下划线)

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2012-03-02
      • 2016-07-09
      相关资源
      最近更新 更多