【问题标题】:Regex to validate custom tracking information正则表达式验证自定义跟踪信息
【发布时间】:2018-10-24 14:20:42
【问题描述】:

我正在努力验证具有以下限制的跟踪信息:

格式:COPYYYY#####

COP是每个跟踪信息的固定前缀

YYYY 是提交跟踪信息的年份(有效年份:2015-2018)

##### 是一个随机生成的 5 位数字

跟踪信息只能包含 3 个字母字符(COP 前缀)

跟踪信息的前 3 个字母字符后面应该正好有 9 个数字字符。

跟踪信息的长度应正好为 12 个字符


由于正则表达式不是验证数字范围的好方法,我决定在格式有效后检查一年。

COP 后跟 9 位数字(即COPXXXXXXXXX

下面的正则表达式总是返回 false,即使输入正确。

/^COP\d{9}$/

请对上述正则表达式提出更正建议,并分享有关在正则表达式中验证年份范围的想法(如果它是更简洁的方法)。

【问题讨论】:

  • 你能分享你的代码吗?
  • 另外请修复您的标签。是java还是javascript?
  • 带有年份的正则表达式可能是^COP201[5-8]\d{5}$,但^COP\d{9}$ 在有 9 位数字时也会匹配。你能分享你的代码吗?

标签: javascript java regex regex-lookarounds regex-group


【解决方案1】:

使用正则表达式模式\bCOP(201[5-8])(\d{5})\b


测试源代码(JavaScript):

var re = /\bCOP(201[5-8])(\d{5})\b/g;
var s = 'To track your packages, enter COP201812345 and COP201867890 at www.example.org';
var m;

do {
    m = re.exec(s);
    if (m) {
        var e = document.createElement('div');
        e.innerHTML = 'Match: ' + m[0] + ' (Year: ' + m[1] + ', Id: ' + m[2] + ')';
        document.getElementById("output").appendChild(e);
    }
} while (m);

测试源代码(Java):

String s = "To track your packages, enter COP201812345 and COP201867890 at www.example.org";
Matcher m = Pattern.compile("\\bCOP(201[5-8])(\\d{5})\\b").matcher(s);
 
while (m.find()) 
    System.out.println(
        "Match: " + m.group() + 
        " (Year: " + m.group(1) + ", Id: " + m.group(2) + ")");
}

输出:

比赛:COP201812345(年份:2018,ID:12345)

比赛:COP201867890(年份:2018,ID:67890)


测试 here (JavaScript) 和 here (Java)。

【讨论】:

    【解决方案2】:

    使用下面的代码。

    String value = "COP201812345";
    Pattern p = Pattern.compile("^(COP)(201[5-8])(\\d{5})$");
    Matcher m = p.matcher(value);
    
    if (m.find()) {
        System.out.println("Tracking number " + value + " is valid");
        System.out.println("Tracking prefix: "               + m.group(1));
        System.out.println("Year between 2015 and 2018 is: " + m.group(2));
        System.out.println("Random 5 digit number is: "      + m.group(3));
    }
    else {
        System.out.println("No match");
    }
    

    输出:

    跟踪号 COP201812345 有效

    跟踪前缀:COP

    2015 年到 2018 年之间的年份是:2018

    随机5位数字为:12345

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 2023-02-04
      • 2018-06-16
      • 1970-01-01
      • 2019-03-12
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多