【问题标题】:regex that returns false and true [duplicate]返回false和true的正则表达式[重复]
【发布时间】:2023-04-06 08:16:01
【问题描述】:

我创建了一个函数,用于检查输入文本字段是否有效,然后将类名附加到将对应于某些 css 代码的元素,或者如果有效则不执行任何操作。

function checkInputText(inputType, elem, oldClass, classError) {
    var inputT = document.getElementById(elem);
    var oldClass = oldClass;
    var b = regex[inputType].test(inputT.value)
    if (!b) {
        inputT.className = classError + ' ' + oldClass;
        return false;
    } else {
        inputT.className = oldClass;
    }
}

但是,由于某种未知的原因,当函数调用 .test() 函数时,它第一次为某个事件返回 true,但当你再次尝试它时,它返回 false。

完整代码在这里http://jsfiddle.net/assuredlonewolf/cscyB/2/

【问题讨论】:

  • 您知道,这条线var oldClass = oldClass; 没有任何作用。
  • 不管有什么问题,在 .test 行的末尾加一个分号 - 这可能不是问题的原因,但无论如何这是必须的。
  • 你为什么不真正尝试解决我的问题,而不是批评我的错误,这显然与我的问题无关
  • 另外,电子邮件检查^\w*@\w*.com 的正则表达式肯定可以改进。这会拒绝someone@telus.netsomeone@shaw.ca,但它允许@.com!@#$%@_.comfoobar 作为有效传递。

标签: javascript regex


【解决方案1】:

“与 exec(或与它结合使用)一样,在同一个全局正则表达式实例上多次调用的测试将超过上一次匹配。” https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/test

您可以通过将 lastIndex 重置为 0 或在每个测试中创建一个新的正则表达式来解决此问题。

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 2016-03-15
    • 2011-02-07
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多