我需要验证装运箱号码。有一个行业标准说只有字母数字和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()。
有人可以建议更好的正则表达式来满足这两个要求(或每个要求一个)吗?
感谢。
答案 0 :(得分:1)
"((?:[a-zA-Z0-9]{4}|/{4})[a-zA-Z0-9]{7})"
然后只检查捕获组1的内容。
答案 1 :(得分:0)
如果有人想要正确验证货物集装箱编号ISO 6346,请参考my Javascript class或Patrik Storm's PHP Class。