正则表达式可选的前导斜杠

时间:2010-01-22 03:39:19

标签: java regex

我需要验证装运箱号码。有一个行业标准说只有字母数字和11个字符的长度是可以接受的。例如:FBXU8891735

然而,还有一个标准的行业惯例,前4个字符可以是正斜线,例如://// 8891735

我有2个要求 - 首先验证容器编号(例如matches()),然后清理容器编号(例如replaceAll())

System.out.println("MSCU3720090".matches("[a-zA-Z0-9]{11}"));    //true - ok
System.out.println("////3720090".matches("[a-zA-Z0-9]{11}"));    //false - fail

System.out.println("MSCU3720090".replaceAll("[^a-zA-Z0-9]*", ""));   //MSCU3720090 - ok
System.out.println("////3720090".replaceAll("[^a-zA-Z0-9]*", ""));   //3720090 - fail

我知道对于matches()我可以使用替代例如:

[a-zA-Z0-9]{11}|////[a-zA-Z0-9]{7}

然而,这似乎很难看,我不知道如何将它用于replaceAll()。

有人可以建议更好的正则表达式来满足这两个要求(或每个要求一个)吗?

感谢。

2 个答案:

答案 0 :(得分:1)

"((?:[a-zA-Z0-9]{4}|/{4})[a-zA-Z0-9]{7})"

然后只检查捕获组1的内容。

答案 1 :(得分:0)

如果有人想要正确验证货物集装箱编号ISO 6346,请参考my Javascript classPatrik Storm's PHP Class