2010-01-22 59 views
1

我需要验证货运集装箱号码。有一个行业标准说只有字母数字和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()。

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

谢谢。

+0

这不是比那更具体的要求吗?前四个字符(如果它们没有被斜杠替换)总是字母,其余的是数字? – 2010-01-22 04:24:30

+0

是的。实际上有一个完整的校验数字算法(ISO-6346),但是这个正则表达式并没有试图做到这一点。这只是为了清洁和验证数据。 – Damo 2010-01-24 09:06:35

回答

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

然后只是检查捕获组1的内容为数字。

+0

如果你想缩短它,\ w与[a-zA-Z0-9]相同,所以你可以使用“((?:\ w {4} |/{4})\ w {7}) “ – Jay 2010-01-22 04:01:23

+0

'\ w'也匹配下划线。尽管你可以使用'[^ ​​\ W_]'。 – 2010-01-22 04:03:41

相关问题