我需要验证货运集装箱号码。有一个行业标准说只有字母数字和11个字符的长度是可以接受的。例如:FBXU8891735可选前导斜杠的正则表达式
但是也有一个标准的行业惯例,其中前4个字符可以是正向斜线如://// 8891735
我有2个要求 - 首先验证容器数字(如。 (如:的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
我知道,对于比赛()我可以使用备用例如:
[a-zA-Z0-9]{11}|////[a-zA-Z0-9]{7}
但是,这看起来很丑,我不知道如何将它用于replaceAll()。
有人可以建议一个更好的正则表达式来满足两个要求(或每个要求一个)?
谢谢。
这不是比那更具体的要求吗?前四个字符(如果它们没有被斜杠替换)总是字母,其余的是数字? – 2010-01-22 04:24:30
是的。实际上有一个完整的校验数字算法(ISO-6346),但是这个正则表达式并没有试图做到这一点。这只是为了清洁和验证数据。 – Damo 2010-01-24 09:06:35