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

Я работаю над требованием проверки информации отслеживания со следующими ограничениями:

Формат: COPYYYY#####

COP - это фиксированный префикс каждой информации отслеживания

YYYY - это год, в который была предоставлена ​​информация об отслеживании (действительные годы: 2015-2018)

##### - это случайное число из 5 цифр

Информация для отслеживания должна содержать только 3 буквенных символа (префикс COP)

Информация для отслеживания должна содержать ровно 9 цифровых символов, следующих за первыми 3 буквенными символами.

Длина информации для отслеживания должна быть ровно 12 символов


Поскольку регулярное выражение не является отличным решением для проверки диапазона номеров, я решил проверить год спустя, как только формат станет действительным.

COP, за которым следуют 9 цифр (т. Е. COPXXXXXXXXX)

Регулярное выражение всегда возвращает false, даже для правильных входных данных.

/^COP\d{9}$/

Пожалуйста, предложите исправленияВыражать регулярные выражения, а также делиться мыслями об утверждении диапазона в регулярных выражениях (если это более чистый подход).

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Используйте код ниже.

String value = "COP201812345";
Pattern p = Pattern.compile("^(COP)(201[5-8])(\\d{5})$");
Matcher m = p.matcher(value);

if (m.find()) {
    System.out.println("Tracking number " + value + " is valid");
    System.out.println("Tracking prefix: "               + m.group(1));
    System.out.println("Year between 2015 and 2018 is: " + m.group(2));
    System.out.println("Random 5 digit number is: "      + m.group(3));
}
else {
    System.out.println("No match");
}

Выход:

Номер отслеживания COP201812345 действителен

Префикс отслеживания: COP

Годмежду 2015 и 2018 гг .: 2018

Случайное 5-значное число: 12345

0 голосов
/ 24 октября 2018

Использовать шаблон регулярных выражений \bCOP(201[5-8])(\d{5})\b


Исходный код теста (JavaScript):

var re = /\bCOP(201[5-8])(\d{5})\b/g;
var s = 'To track your packages, enter COP201812345 and COP201867890 at www.example.org';
var m;

do {
    m = re.exec(s);
    if (m) {
        var e = document.createElement('div');
        e.innerHTML = 'Match: ' + m[0] + ' (Year: ' + m[1] + ', Id: ' + m[2] + ')';
        document.getElementById("output").appendChild(e);
    }
} while (m);

Исходный код теста (Java):

String s = "To track your packages, enter COP201812345 and COP201867890 at www.example.org";
Matcher m = Pattern.compile("\\bCOP(201[5-8])(\\d{5})\\b").matcher(s);

while (m.find()) 
    System.out.println(
        "Match: " + m.group() + 
        " (Year: " + m.group(1) + ", Id: " + m.group(2) + ")");
}

Выходные данные:

Соответствие: COP201812345 (год: 2018, идентификатор: 12345)

Соответствие: COP201867890 (год: 2018, идентификатор: 67890)


Проверьте это здесь (JavaScript) и здесь (Java).

...