gpt4 book ai didi

Javascript正则表达式,在线测试网站上匹配正确,但代码错误

转载 作者:行者123 更新时间:2023-12-03 05:19:14 25 4
gpt4 key购买 nike

我有正则表达式来匹配 24 小时内的时间格式接受的格式为:1:00、01:00、100、0100 等至 23 小时

而且,我还有特殊情况 - 我需要有时间接受 1:00*、01:00* 或 100* 的 DST 转换时间

所以它基本上是两个正则表达式的串联

这是正则表达式字符串^(0?1:?[0-5][0-9]\*)|((0[0-9]|1[0-9]|2[0-3]|[0- 9]):?[0-5][0-9])$

关于 https://regex101.com/ , http://www.regexplanet.com/ :

    1:00 - true
1:00* - true
1:00& - false
2:00 - true

在代码中:

    var r = new RegExp('^(0?1:?[0-5][0-9]\*)|((0[0-9]|1[0-9]|2[0-3]|[0-9]):?[0-5][0-9])$');
var b1 = r.test("1:00"); // true
var b2 = r.test("1:00*"); // true
var b3 = r.test("1:00&"); // true - wrong
var b4 = r.test("1:00#"); // true - wrong

因此它会为时间字符串之后的任何符号返回错误匹配

我在每个子表达式后面用 ^ 和 $ 更改了它

^(0?1:?[0-5][0-9]\*)$|^((0[0-9]|1[0-9]|2[0-3 ]|[0-9]):?[0-5][0-9])$

在线测试:

    1:00 - true
1:00* - true
1:00& - false
2:00 - true

在代码中:

    var r = new RegExp('^(0?1:?[0-5][0-9]\*)$|^((0[0-9]|1[0-9]|2[0-3]|[0-9]):?[0-5][0-9])$');
var b1 = r.test("1:00"); // true
var b2 = r.test("1:00*"); // false - wrong
var b3 = r.test("1:00&"); // false
var b4 = r.test("1:00#"); // false

因此,在这两种情况下,在线测试都可以正常工作,但在代码中却并非如此。可能是什么问题?

我无法使用 '/^(0?1:?[0-5][0-9]*)$/' 表单,因为 Extjs 4.2.3 不接受此类表单进行文本字段验证。我在构造中使用它进行表单字段验证,如下所示:

    regex: new RegExp('^(0?1:?[0-5][0-9]\*)$|((0[0-9]|1[0-9]|2[0-3]|[0-9]):?[0-5][0-9])$'),
regexText: 'Not a valid time. Accepted formats: HMM, H:MM, HHMM, HH:MM, 1:MM*, 01:MM*, 1MM*'

最佳答案

您只需转义 * 两次,一次用于字符串,一次用于正则表达式:

var r = new RegExp('^(0?1:?[0-5][0-9]\\*)|((0[0-9]|1[0-9]|2[0-3]|[0-9]):?[0-5][0-9])$');

或者你可以这样说:

var r = /^(0?1:?[0-5][0-9]\*)|((0[0-9]|1[0-9]|2[0-3]|[0-9]):?[0-5][0-9])$/

只需在控制台中尝试这些即可理解:

var str = '\*';
console.log(str); // *

var r = new RegExp('[0-9]\*');
console.log(r); // /[0-9]*/

var str = '\\*';
console.log(str); // \*

var r = new RegExp('[0-9]\\*');
console.log(r); // /[0-9]\*/

关于Javascript正则表达式,在线测试网站上匹配正确,但代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com