2016-09-14 3 views
1

У меня есть текстовое поле, чтобы принять номера с (12 символов), как показано ниже четыре формата толькоRegex для определенных форматов числа с «-» символы

12345-1234-12 
1234-1234-12 
12345-123-12 
12345-1234-1 

Я попытался это регулярное выражение

"(\\d{4,5}-\\d{3,4}-\\d{1,2})" 

Но он принимает на себя ниже форматы также, что это не мое требование, и я не хочу ниже форматов принять

1234-123-1 
1234-1234-1 

Предлагайте меня будет работать любое другое регулярное выражение?

+1

Определите «не повезло». Что случилось? И как вы его использовали? – Tunaki

+0

Принимает 1234-123-1 1234-1234-1 также, что не является моим требованием – Krishna

+0

Почему это неправильно, чтобы сопоставить эти другие строки? Я не понимаю, почему они не должны совпадать ... – fabian

ответ

2

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

^(\d{4,5}-\d{3,4}-\d{1,2})(?<=^.{12}) 

Проверки, если часть строки от начала строки до (?<=^.{12}) имеет ровно 12 символов.

Java Пример:

Pattern p = Pattern.compile("^(\\d{4,5}-\\d{3,4}-\\d{1,2})(?<=^.{12})"); 
for (String s : new String[]{"12345-1234-12", 
    "1234-1234-12", 
    "12345-123-12", 
    "12345-1234-1", 
    "1234-123-1", 
    "1234-1234-1" 
}) { 
    System.out.println(s); 
    System.out.println(p.matcher(s).matches()); 
} 

выходы

12345-1234-12 
false 
1234-1234-12 
true 
12345-123-12 
true 
12345-1234-1 
true 
1234-123-1 
false 
1234-1234-1 
false 

Если строка 13 символов должна также соответствовать, то можно было бы с просмотром назад изменено на (?<=^.{12,13}). (Это приведет к возврату true для первого ввода.)

+0

Спасибо fabian .. он работает – Krishna

Смежные вопросы