Регулярное выражение, которое может содержать буквенно-цифровые символы, но не может содержать ничего, кроме |и пространство - PullRequest
0 голосов
/ 12 сентября 2018

При проверке почтового индекса я пытаюсь проверить, есть ли почтовый индекс, который может содержать буквенно-цифровые символы и только символы -, | и (пробел).

I 'm проверяет

"34343-1232".matches("(?!|| |-|[0-9])"))

, но это не работает.Есть ли оптимальный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Я не знаю точных правил zip в вашей стране, но этот фрагмент поможет вам начать:

// define the pattern - should be defined as class field
// instead of + you could use {3,5} to match min. 3, max. 5 characters - see regular expressions manual
private static final Pattern PATTERN_ZIP = Pattern.compile("^[0-9A-Z]+[ \\-\\|]?[0-9A-Z]+$");

String zip = "1A2-3B4C5";
// Optional: let's make some text cleaning
String cleanZip = zip.toUpperCase().trim();

// Do the mat(c)h
Matcher m = PATTERN_ZIP.matcher(cleanZip);

if (m.find()) {
    System.out.println("Zip code correct");
} else {
    System.out.println("Zip code incorrect");
}
0 голосов
/ 12 сентября 2018

Если учесть простые почтовые индексы (например, 12345) и обеспечить, чтобы в случае обнаружения принятого разделителя (пробел, запятая, труба) его нужно было завершить четырьмя цифрами, этого регулярного выражения должно быть достаточно.

[0-9]{5}(?:[-,| ][0-9]{4})?
0 голосов
/ 12 сентября 2018

Вам не нужен отрицательный прогноз, вы можете использовать класс символов ([]) вместо | операторов, и вы хотите использовать ^ и $ для обозначения начала и концастроки.Как это:

"34343-1232".matches("^[0-9| -]+$")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...