Регулярное выражение для необязательных передних наклонных черт - PullRequest
1 голос
/ 22 января 2010

Мне нужно проверить номера контейнеров. Существует отраслевой стандарт, который гласит, что допустимы только буквенно-цифровые символы и длина 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 ().

Может ли кто-нибудь предложить лучшее регулярное выражение для удовлетворения обоих требований (или по одному для каждого требования)?

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 января 2010
"((?:[a-zA-Z0-9]{4}|/{4})[a-zA-Z0-9]{7})"

Затем просто проверьте содержимое группы захвата 1 для номера.

0 голосов
/ 29 сентября 2014

В случае, если кто-то хочет надлежащей проверки правильности номера грузового контейнера ISO 6346, обратитесь к моему классу Javascript для этой цели или PHP-классу Patrik Storm .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...