我需要验证容器号码。有一个行业标准规定,长度只能是字母数字和 11 个字符。例如:FBXU8891735
但是,还有一个标准的行业惯例,其中前 4 个字符可以是正斜杠,例如:////8891735
我有两个要求 - 首先验证容器编号(例如 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()。
有人可以建议一个更好的正则表达式来满足这两个要求(或每个要求一个)吗?
谢谢。
最佳答案
"((?:[a-zA-Z0-9]{4}|/{4})[a-zA-Z0-9]{7})"
然后只需检查捕获组 1 的内容中的数字即可。
关于java - 用于可选前导正斜杠的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114770/