Существует несколько способов сделать это. В вашем случае, вы можете использовать отрицательный предпросмотр:
<input type="text" id="categoryId" data-constraints="@Pattern(regex=/^(?!.*[0-9]-[A-Z]{3}-[0-9]{4})/)" />
Я не уверен, как это работает для более сложных регулярных выражений, но если это так, я думаю, вы могли бы создать пользовательское ограничение:
regula.custom({
name: "NotPattern",
params: ["regex"],
defaultMessage: "The value must not match {regex}.",
validator: function(params) {
var regex = new RegExp(params["regex"]);
return !regex.test(this.value);
}
});
вы даже можете отложить до встроенного @Pattern
валидатора в функции валидатор, например, так:
regula.custom({
name: "NotPattern",
params: ["regex"],
defaultMessage: "The value must not match {regex}.",
validator: function(params, validator) {
return !validator.pattern(this, params);
}
});
Затем вы можете использовать его в элемент ввода следующим образом:
<input type="text" id="categoryId" data-constraints="@NotPattern(regex=/[0-9]-[A-Z]{3}-[0-9]{4}/)" />
Я предлагаю второй подход, потому что вы можете передать параметры, что встроенный @Pattern
валидатор поддерживает, как flags
для регулярных выражений флагов. Это также является правильным обратным для встроенного валидатора.
EDIT: Я думаю, было бы полезно добавить необязательный параметр в @Pattern
, чтобы вы могли инвертировать шаблон. Таким образом, в основном (предполагая, что эта функция была реализована) все, что вы должны сделать, это:
<input type="text" id="categoryId" data-constraints="@Pattern(regex=/[0-9]-[A-Z]{3}-[0-9]{4}/, invert=true)" />
Я помещу это в моем списке вещей, чтобы сделать.
Это работает! Огромное спасибо!! –