Проблемы с инициализацией Regex - PullRequest
4 голосов
/ 08 марта 2011

Я работаю с устаревшим кодом и пытаюсь добавить новое регулярное выражение в перечислитель валидатора для наших целей, помеченных как «URL». Насколько я понимаю, каждая часть перечислителя может быть вызвана в отдельное регулярное выражение. Во всяком случае, вот что у меня есть (и другие следуют, отсюда и запятая):

URL("[a-zA-Z0-9\r#;?-\'.:,!/\\s]{1,250}", "Up to 250 letters (upper and lower case), numbers, #, ;, ?, -, ', ., :, comma, !, /, blankspace and carriage return"),

Я сделал простой тест JUnit, чтобы проверить, работает ли он правильно. Это не так.

Caused by: java.util.regex.PatternSyntaxException: Illegal character range near index 15
[a-zA-Z0-9
#;?-'.:,!/\s]{1,250}
               ^

Я пытаюсь ограничить ввод URL-адреса типа от 1 до 250 символов, что я и делал, но Eclipse, кажется, оскорбляет эту запятую (я полагаю, запятая - индекс 15) Что я делаю не так?

1 Ответ

8 голосов
/ 08 марта 2011

Проблема, вероятно, здесь:

?-'

Это интерпретируется как диапазон от символа ? до символа ', что недопустимо, поскольку ? имеет кодовую точку 63, а ' имеет кодовую точку 39. Диапазоны должны переходить от низкого к высоко. Но вы, вероятно, не намеревались иметь здесь диапазон. Я полагаю, вы имели в виду буквальный дефис.

Чтобы исправить ошибку, попробуйте экранировать дефис:

?\\-'

Причина, по которой индикатор сообщения об ошибке находится не в том месте, связана с \r в регулярном выражении. Если вы заменяете новую строку другим символом, индикатор выравнивается с неверным диапазоном:

[a-zA-Z0-9_#;?-'.:,!/\s]{1,250}
               ^

Вы также можете использовать \\r вместо \r, чтобы сообщение об ошибке выводилось правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...