2015-11-30 3 views
3

Я пытаюсь написать регулярное выражение, которое будет соответствовать всем телефонным номерам в Норвегии. Это означает, что число может начинаться с +47, 0047, 47 или без кода страны. Для достижения этой цели я использую следующие регулярные исчисления:Регулярное выражение для норвежских цифр

Pattern.compile("^((0047)?|(\"+47)?|(47)?)\"d{8}$") 

Проблема в том, что она никогда не сопоставляется. Я проверяю его на следующих действительных примеров:

90909090, normal number 
4790909090, number with country code 
+4790909090, country code using + 
004790909090, country code using 00 

и недопустим:

+47909090, without country code or too short number 
9090909o, invalid character 
9090909, too few digits 
+4690909090, wrong country code 
909090909, too many digits 
00474790909090 Trying to fool the regex now 
+1

У вас действительно есть '/' в конце? Он не может следовать концу строки. Попробуйте '^ (?: [+]? (?: 00)? 47)? [0-9] {8} $'. –

+0

Вы действительно хотите, чтобы '\' 'посередине? В ваших примерах нет двойных кавычек. –

+0

Я бы хотел отметить, что только потому, что стандартные норвежские телефонные номера сегодня 8 цифр, это не означает им это понравится навсегда. Или даже надолго. Плюс сегодня есть нестандартные номера, которые являются действительными номерами телефонов, которые не соответствуют вашему желаемому шаблону - см. http://www.nkom.no/market/numbering/ e.164-нумерация-план/общий-норвежский-нумерация-план-для-телефонии-etc.e.164 –

ответ

7

Подумайте, что вы ищете

(0047|\+47|47)?\d{8} 

, который в этом выражении Java будет:

Pattern.compile("(0047|\\+47|47)?\\d{8}"); 
+1

Затем, чтобы сопоставить всю строку с шаблоном, который вы используете [Matcher # matches()] (https: // docs .oracle.com/javase/7/docs/api/java/util/regex/Matcher.html # matches \ (\)), а не Matcher # find, так как это обнаружит появление в любом месте строки. – Devexed

0

Ответ Сами почти правильно, но не сможет идентифицировать числа, начинающиеся с 0 или 1. Номера, начинающиеся с 0, недопустимы, а числа, начинающиеся с 1, зарезервированы в Норвегии (ref). Следующие должны работать:

/^(0047|\+47|47)?[2-9]\d{7}$/ 

В вашем выражении Java:

Pattern.compile("^(0047|\+47|47)?[2-9]\d{7}$") 
Смежные вопросы