Мне нужно проверить номера контейнеров. Существует отраслевой стандарт, который гласит, что допустимы только буквенно-цифровые символы и длина 11 символов. например: FBXU8891735
Однако существует также стандартная отраслевая практика, когда первые 4 символа могут быть косыми чертами, например: //// 8891735
У меня есть 2 требования - во-первых, для проверки номеров контейнеров (например, match ()), а во-вторых, для очистки номеров контейнеров (например, 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 ().
Может ли кто-нибудь предложить лучшее регулярное выражение для удовлетворения обоих требований (или по одному для каждого требования)?
Спасибо.