Мне нужно создать регулярное выражение для голландских телефонных номеров. То, что я получил до сих пор:Regex с голландскими номерами телефонов
[0-9\\-\\+]{8,14}
Это регулярное выражение прекрасно работает для нормальных чисел, таких как: 020-5951611
Однако мне нужно добавить служебные номера, такие как «112», «0800-1234», но " 0909-12345678 "должен быть недействительным, потому что он слишком длинный. У меня есть файл с большим количеством тестовых примеров (здесь), если есть истина, номер должен быть действительным, если он неверен, номер недействителен.
System.err.println("running checkNummer");
TelefoonNummerChecker instance = new TelefoonNummerChecker();
assertEquals(true, instance.checkNummer("020-5951611"));
assertEquals(true, instance.checkNummer("0205951611"));
assertEquals(true, instance.checkNummer("+31205951611"));
assertEquals(true, instance.checkNummer("+3120-5951611"));
assertEquals(true, instance.checkNummer("+31612345678"));
assertEquals(true, instance.checkNummer("+316-12345678"));
assertEquals(true, instance.checkNummer("06-12345678"));
assertEquals(true, instance.checkNummer("0612345678"));
assertEquals(true, instance.checkNummer("0031612345678"));
assertEquals(true, instance.checkNummer("00316-12345678"));
assertEquals(true, instance.checkNummer("0234-123456"));
assertEquals(true, instance.checkNummer("0234123456"));
assertEquals(true, instance.checkNummer("+31234-123456"));
assertEquals(true, instance.checkNummer("+31234123456"));
assertEquals(true, instance.checkNummer("+3132")); // lelystad 0320
assertEquals(true, instance.checkNummer("003132"));
assertEquals(true, instance.checkNummer("0031320-123456"));
assertEquals(true, instance.checkNummer("0320-123456"));
// korte service nummers:
assertEquals(true, instance.checkNummer("112"));
assertEquals(true, instance.checkNummer("0800-1234"));
assertEquals(false, instance.checkNummer("0909-12345678")); // too long
assertEquals(true, instance.checkNummer("090"));
assertEquals(true, instance.checkNummer("08009876"));
assertEquals(false, instance.checkNummer("0808-123456"));
assertEquals(false, instance.checkNummer("+32205951611")); // not valid in NL
assertEquals(false, instance.checkNummer("+3220-5951611")); // not valid in NL
assertEquals(false, instance.checkNummer("02-05951611")); // before dash should be 3 or 4 long
assertEquals(false, instance.checkNummer("02-15951611")); // before dash should be 3 or 4 long
assertEquals(false, instance.checkNummer("0-215951611")); // before dash should be 3 or 4 long
assertEquals(false, instance.checkNummer("02059-51611")); // before dash should be 3 or 4 long
assertEquals(false, instance.checkNummer("0034-1234567")); // before dash may not have 2x a 0
assertEquals(false, instance.checkNummer("0200951611")); // may not start with 0
assertEquals(false, instance.checkNummer("02059516229")); // too long
assertEquals(false, instance.checkNummer("020595162")); // too short
assertEquals(false, instance.checkNummer("020-0234567")); // may not start with 0
assertEquals(false, instance.checkNummer("123456789")); // no 10 numbers
assertEquals(false, instance.checkNummer("1234567890")); // net number doesn't start with 0
assertEquals(false, instance.checkNummer("123-5951619")); // net number doesn't start with 0
assertEquals(false, instance.checkNummer("0320-")); // abo starts with zero
assertEquals(false, instance.checkNummer("+31-205951611")); // no dash before abon number
assertEquals(false, instance.checkNummer("+31-2-05951611")); // no 2x -
assertEquals(false, instance.checkNummer("+31-2-0-5951611")); // no 2x -
assertEquals(false, instance.checkNummer("+31-2-0-595161-1")); // no 2x -
assertEquals(false, instance.checkNummer("06-1-2345678")); // no 2x -
assertEquals(false, instance.checkNummer("020-59-51611")); // no 2x -
assertEquals(false, instance.checkNummer("020-5-9-51611")); // no 2x -
assertEquals(false, instance.checkNummer("0205951-611")); // too long
assertEquals(false, instance.checkNummer("06-1-2345678")); // no 2x -
assertEquals(false, instance.checkNummer("0045106539985")); // not dutch
assertEquals(false, instance.checkNummer("0031476534")); // 0031, not enough numbers next to 0031
assertEquals(false, instance.checkNummer("+310612345678")); // 06 must be 6
assertEquals(false, instance.checkNummer("00310205951688")); // 020 must be 20
System.err.println("end test checkNummer");
Я надеюсь, что кто-то может помочь мне в этом, спасибо заранее!
Редактировать: Он должен быть на Java.
Подтверждение формы номера телефона с регулярным выражением разделяет те же ошибки, что и проверка электронной почты с регулярным выражением. Можете ли вы все поймать? Стоит ли оно того? Что вы пытаетесь проверить - существующие числа или номер, который пользователь намеревался? Если последний, рассмотрите ввод «подтвердить номер». Неужели возникает проблема, с которой пользователи часто сталкиваются? Будет ли более полезной процедура проверки? – Gusdor
Другой подобный вопрос был [задан до] (http://stackoverflow.com/questions/17949757/regular-expression-for-dutch-phone-number). Попробуйте решения там и посмотрите, удовлетворяет ли оно вашим потребностям. В другой заметке вам не нужно скрывать '+' в символьном классе, так как он потеряет смысл, поместите '-' в конец класса символов и не сформирует диапазон, который означает, что он также теряет имея в виду. Поздравляем, вы просто сохранили 4 байта и боль в глазах '[0-9 + -] {8,14}' – HamZa
Не могли бы вы поместить английские комментарии в свой фрагмент кода, пожалуйста? – Jerry