2013-11-08 4 views
0

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

^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$ 

Теперь это работает отлично и поднимает недопустимые строки и так далее – однако , если я передаю нуль String в регулярное выражение, он возвращает true, поэтому, когда я выполняю проверку на аннотации Pattern, сообщения об ограничениях не сообщаются. Является ли это ожидаемым поведением, поскольку String имеет значение null, он не выполняет никакой проверки?

В пути вокруг этого, на метод получения, что я аннотированный с Pattern аннотацию, я использовал этот

return id != null ? id : "null" 

Это работает, но это, кажется, немного ... Hacky ко мне :)

+0

Стандартная Java не имеет аннотации 'Pattern', а только класса. Вы используете некоторые рамки? – Pshemo

+1

Я предполагаю, что передача пустой строки создаст исключение NullPointerException. Можете ли вы добавить код, в котором вы на самом деле применяете шаблон? –

+0

Я использую аннотации Hibernate, насколько я знаю, когда null передан, проверка регулярных выражений не выполняется, поэтому я предполагаю, что это не так с моим кодом! – KingTravisG

ответ

3

Если вы хотите, чтобы исключить NULL, используйте a 'not null' annotation, например @NotNull.


PatternValidator возвращает true если аргумент null (странный выбор, имхо); это прямо сказано в источнике. Я видел разные версии, и все они делали это, так что это действительно часть контракта (и его нужно документировать лучше).

public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { 
    if (value == null) { 
     return true; 
    } 
    Matcher m = pattern.matcher(value); 
    return m.matches(); 
} 
+0

Да, очень странно, хотя я могу понять, насколько технически нуль не соответствует шаблону ... – KingTravisG

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