2012-01-11 2 views
2

У меня возникли проблемы с написанием регулярного выражения для телефонных номеров. (Не слишком велика у них еще нет) Номер может содержать только: 0-9,+,/,.,-, ,(,) Я думал:java regex match 0-9 и некоторые специальные символы

@Pattern(regexp = "(0-9+/\\.\\- \\(\\))?") 

Но это уже жалуется, когда я просто введите 100.

ответ

3

Попробуйте это регулярное выражение [0-9\.\-\s+\/()]+

Но согласно вашему объяснению и, таким образом, моему регулярному выражению, это также допустило бы +++ или одно место или что-то в этом роде, это то, что вы хотите?

EDIT: так что может быть лучше использовать следующее: ([\.\-\s+\/()]*[0-9][\.\-\s+\/()]*){8,15}

, которая требует, по крайней мере 8-15 чисел и позволяет другим персонажам появляться между ними.

+0

Ну, не то, что я хочу, но это то, что мне нужно. Наш веб-дизайнер слишком любит предоставлять нашим пользователям большую свободу и доверяет их доброй воле вводить точные данные. –

0

Вам нужно создать класс символов, используя квадратные скобки вокруг.

[0-9+/.()-]+ 

См this expression on Regexr

Это означает, что соответствует ни одному из символов внутри класса один или несколько раз (из-за квантором + в конце)

Но это будет соответствовать этим символам в любой заказ, например «.....» будет соответствовать.

Вашего регулярного выражения (0-9+/\\.\\- \\(\\))? ведет себя таким образом:

Match "0-", то последовательность девяток следует "/.-()". Из-за ? после окружающих скобок весь шаблон является необязательным, то есть он также будет соответствовать пустой строке.

См your expression on Regexr

+0

будет работать для международных телефонных номеров. –

+0

@SureshSankar это будет соответствовать любой строке, состоящей только из символов «0-9 + /. \\ -()». так что это позволит обеспечить большую свободу и, например, «++++ (((« будет соответствовать – stema

0

Я думаю, что вы хотите "[-0-9+/.()]+" - специальные символы обрабатываются по-разному в [], и лучший способ справиться с -, чтобы поставить его первым.

+0

или положить его '-' последнему. –

0

Правильный образец: ^[\d\/\(\)\- \.]+$

Разделив регулярное выражение вы можете увидеть:

^ #Won't match if it doesn't start at the beginning 
[ #The character can contain... 
\d #digits 
\/ #slash 
\( #brackets (open) 
\) #brackets (close) 
\- #hyphen 
    #space (\s is also possible but can be tab too) 
\. #or a dot 
] 
+ #The character can be repeated 
$ #Won't match if it doesn't reach the end 
+0

Я думаю, вам не нужно избегать ни обратной косой черты, ни скобок внутри символьного класса –

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