Java проверить на валидность comma separated values через regex

189
26 мая 2018, 20:10
import javax.validation.constraints.Pattern;
public class A {
     @Pattern(regexp = "")
     private String values;
     // getter and setter
}
public class Main {
    public static void main(String[] args) {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        A a = new A();
        a.setValues("name1:value1,name2:value,name10:value7");
        Set<ConstraintViolation<A>> constraintViolations = validator.validate(a);
        System.out.println(constraintViolations.size());
        System.out.println(constraintViolations.iterator().next().getMessage());
    }
}

Поле private String values; содержит comma separated values (name:value, ...,...). Где "name" и "value" не должны повторяться. Разделитель ","

Как проверить на языке java валидность через один regex используя @Pattern ?:

  1. Если Comma separated values валиден - содержит правильную структуру "name1:value1,name2:value,name10:value7"
  2. Если "name" не повторяеться
Answer 1
^((\w+):\w+(?!.*,\2:)(,|$))+$

Для проверки (в браузере под \w подойдут только латинские буквы, цифры и подчёркивания, джава должна сделать правильно):

input { outline: none; border: 1px solid; width: 100%; box-sizing: border-box; } 
:valid { border-color: green; } 
:invalid { border-color: red; }
<input pattern="^((\w+):\w+(?!.*,\2:)(,|$))+$" autofocus>

READ ALSO
Переписать с использование Java 8 Stream

Переписать с использование Java 8 Stream

Метод должен возвратить индекс такси, для которого будет выгоднее всего подъехать к whereIsClienttaxis - LinkedList, calcDistance - вычисляет расстояние между...

173
Singleton Java без synchronized и volatile

Singleton Java без synchronized и volatile

Правильная ли такая реализация потокобезопасного Singleton? И как его можно ещё реализовать без применения synchronized и volatile?

199
Случайная генерация двух дат до 30 дней

Случайная генерация двух дат до 30 дней

Есть два поля начальная дата и конечная дата На входе получить начальная дата c текущей датой, конечная дата должна быть выше начальная дата,...

237