diff --git a/packages/form-system/stories/17-Validation-Examples.stories.mdx b/packages/form-system/stories/17-Validation-Examples.stories.mdx
index cd13a519c..ba5b880e5 100644
--- a/packages/form-system/stories/17-Validation-Examples.stories.mdx
+++ b/packages/form-system/stories/17-Validation-Examples.stories.mdx
@@ -23,6 +23,7 @@ import {
MinNumber,
Required,
Validator,
+ Pattern,
} from '@lion/validate';
@@ -72,6 +73,11 @@ Useful on input elements it allows to define how many characters can be entered.
.modelValue=${'that should be enough'}
label="MinMaxLength"
>
+ Rocks" is in this input #LionRocks'}
+ label="Pattern"
+ >
`}
diff --git a/packages/validate/index.js b/packages/validate/index.js
index 49815933d..e3d9c3be0 100644
--- a/packages/validate/index.js
+++ b/packages/validate/index.js
@@ -14,6 +14,7 @@ export {
MaxLength,
MinMaxLength,
IsEmail,
+ Pattern,
} from './src/validators/StringValidators.js';
export { IsNumber, MinNumber, MaxNumber, MinMaxNumber } from './src/validators/NumberValidators.js';
diff --git a/packages/validate/src/loadDefaultFeedbackMessages.js b/packages/validate/src/loadDefaultFeedbackMessages.js
index 3a2a6d2c1..615697812 100644
--- a/packages/validate/src/loadDefaultFeedbackMessages.js
+++ b/packages/validate/src/loadDefaultFeedbackMessages.js
@@ -15,6 +15,7 @@ import {
MaxLength,
MinLength,
MinMaxLength,
+ Pattern,
} from './validators/StringValidators.js';
export { IsNumber, MaxNumber, MinMaxNumber, MinNumber } from './validators/NumberValidators.js';
@@ -117,6 +118,7 @@ export function loadDefaultFeedbackMessages() {
MinLength.getMessage = async data => getLocalizedMessage(data);
MaxLength.getMessage = async data => getLocalizedMessage(data);
MinMaxLength.getMessage = async data => getLocalizedMessage(data);
+ Pattern.getMessage = async data => getLocalizedMessage(data);
IsEmail.getMessage = async data => getLocalizedMessage(data);
IsNumber.getMessage = async data => getLocalizedMessage(data);
MinNumber.getMessage = async data => getLocalizedMessage(data);
diff --git a/packages/validate/src/validators/StringValidators.js b/packages/validate/src/validators/StringValidators.js
index 9f0576c16..6401c01db 100644
--- a/packages/validate/src/validators/StringValidators.js
+++ b/packages/validate/src/validators/StringValidators.js
@@ -89,3 +89,25 @@ export class IsEmail extends Validator {
return hasError;
}
}
+
+const hasPattern = (value, pattern) => pattern.test(value);
+export class Pattern extends Validator {
+ static get validatorName() {
+ return 'Pattern';
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ execute(value, pattern = this.param) {
+ if (!(pattern instanceof RegExp)) {
+ throw new Error(
+ 'Psst... Pattern validator expects RegExp object as parameter e.g, new Pattern(/#LionRocks/) or new Pattern(RegExp("#LionRocks")',
+ );
+ }
+ let hasError = false;
+ if (!isString(value) || !hasPattern(value, pattern)) {
+ hasError = true;
+ }
+
+ return hasError;
+ }
+}
diff --git a/packages/validate/stories/Overview.stories.mdx b/packages/validate/stories/Overview.stories.mdx
index 4eedf97e8..20611df71 100644
--- a/packages/validate/stories/Overview.stories.mdx
+++ b/packages/validate/stories/Overview.stories.mdx
@@ -92,7 +92,7 @@ class MyValidator extends Validator {
By default, the validate system ships with the following validators:
- Required
-- IsString, EqualsLength, MinLength, MaxLength, MinMaxLength, IsEmail
+- IsString, EqualsLength, MinLength, MaxLength, MinMaxLength, IsEmail, Pattern
- IsNumber, MinNumber, MaxNumber, MinMaxNumber
- IsDate, MinDate, MaxDate, MinMaxDate, IsDateDisabled
- DefaultSuccess
diff --git a/packages/validate/test/StringValidators.test.js b/packages/validate/test/StringValidators.test.js
index df98ff375..b381a9807 100644
--- a/packages/validate/test/StringValidators.test.js
+++ b/packages/validate/test/StringValidators.test.js
@@ -7,6 +7,7 @@ import {
MaxLength,
MinMaxLength,
IsEmail,
+ Pattern,
} from '../src/validators/StringValidators.js';
describe('String Validation', () => {
@@ -111,4 +112,27 @@ describe('String Validation', () => {
isEnabled = validator.execute('foo@120.120.120.93');
expect(isEnabled).to.be.true;
});
+
+ it('provides new Pattern() to allow only valid patterns', () => {
+ let isEnabled;
+ let validator = new Pattern(/#LionRocks/);
+ expect(validator.constructor.validatorName).to.equal('Pattern');
+
+ isEnabled = validator.execute('#LionRocks');
+ expect(isEnabled).to.be.false;
+
+ isEnabled = validator.execute('#LionRests');
+ expect(isEnabled).to.be.true;
+
+ validator = new Pattern(new RegExp('#LionRocks'));
+ isEnabled = validator.execute('Some string #LionRocks');
+ expect(isEnabled).to.be.false;
+
+ validator = new Pattern('#LionRocks');
+ expect(() => {
+ validator.execute('Some string #LionRocks');
+ }).to.throw(
+ 'Psst... Pattern validator expects RegExp object as parameter e.g, new Pattern(/#LionRocks/) or new Pattern(RegExp("#LionRocks")',
+ );
+ });
});
diff --git a/packages/validate/translations/bg.js b/packages/validate/translations/bg.js
index 71c3cf31e..a8f2c2bbd 100644
--- a/packages/validate/translations/bg.js
+++ b/packages/validate/translations/bg.js
@@ -5,6 +5,7 @@ export default {
MinLength: 'Моля, въведете правилен {fieldName} (поне {params}).',
MaxLength: 'Моля, въведете правилен {fieldName} (до {params} знака).',
MinMaxLength: 'Моля, въведете правилен {fieldName} (между {params.min} и {params.max} знака).',
+ Pattern: 'Введіть правильні дані {fieldName}.',
IsNumber: 'Введіть правильні дані {fieldName}.',
MinNumber: 'Моля, въведете {fieldName} повече от {params}.',
MaxNumber: 'Моля, въведете {fieldName} по-малко от {params}.',
diff --git a/packages/validate/translations/cs.js b/packages/validate/translations/cs.js
index 8a01e8619..ed20aeaa3 100644
--- a/packages/validate/translations/cs.js
+++ b/packages/validate/translations/cs.js
@@ -5,6 +5,7 @@ export default {
MinLength: 'Zadejte správné {fieldName} (alespoň {params}).',
MaxLength: 'Zadejte správné {fieldName} (až {params} znaků).',
MinMaxLength: 'Zadejte správné {fieldName} (od {params.min} do {params.max} znaků).',
+ Pattern: 'Zadejte platné {fieldName}.',
IsNumber: 'Zadejte platné {fieldName}.',
MinNumber: 'Zadejte {fieldName} větší než {params}.',
MaxNumber: 'Zadejte {fieldName} menší než {params}.',
diff --git a/packages/validate/translations/de.js b/packages/validate/translations/de.js
index 17f1564ec..5a8107ba8 100644
--- a/packages/validate/translations/de.js
+++ b/packages/validate/translations/de.js
@@ -5,6 +5,7 @@ export default {
MinLength: 'Du musst mindestens {params} Zeichen eingeben.',
MaxLength: 'Du kannst maximal {params} Zeichen eingeben.',
MinMaxLength: 'Du musst zwischen {params.min} und {params.max} Zeichen eingeben.',
+ Pattern: 'Geben Sie ein gültiges {fieldName} ein.',
IsNumber: 'Geben Sie ein gültiges {fieldName} ein.',
MinNumber: 'Geben Sie für {fieldName} einen Wert über {params} ein.',
MaxNumber: 'Geben Sie für {fieldName} einen Wert unter {params} ein.',
diff --git a/packages/validate/translations/en.js b/packages/validate/translations/en.js
index 48df42171..3fd81e6ff 100644
--- a/packages/validate/translations/en.js
+++ b/packages/validate/translations/en.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Please enter a correct {fieldName} (up to {params} characters).',
MinMaxLength:
'Please enter a correct {fieldName} (between {params.min} and {params.max} characters).',
+ Pattern: 'Please enter a valid {fieldName}',
IsNumber: 'Please enter a valid {fieldName}.',
MinNumber: 'Please enter a(n) {fieldName} higher than {params}.',
MaxNumber: 'Please enter a(n) {fieldName} lower than {params}.',
diff --git a/packages/validate/translations/es.js b/packages/validate/translations/es.js
index a4d23fcf5..fd79e1608 100644
--- a/packages/validate/translations/es.js
+++ b/packages/validate/translations/es.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Introduzca un/a {fieldName} correcto/a (hasta {params} caracteres).',
MinMaxLength:
'Introduzca un/a {fieldName} correcto/a (de entre {params.min} y {params.max} caracteres).',
+ Pattern: 'Introduzca un/a {fieldName} válido/a.',
IsNumber: 'Introduzca un/a {fieldName} válido/a.',
MinNumber: 'Introduzca un/a {fieldName} superior a {params}.',
MaxNumber: 'Introduzca un/a {fieldName} inferior a {params}.',
diff --git a/packages/validate/translations/fr.js b/packages/validate/translations/fr.js
index 8dc142eaf..3ec59ad39 100644
--- a/packages/validate/translations/fr.js
+++ b/packages/validate/translations/fr.js
@@ -7,6 +7,7 @@ export default {
MaxLength: "Veuillez indiquer un(e) {fieldName} correct(e) (jusqu'à {params} caractères).",
MinMaxLength:
'Veuillez indiquer un(e) {fieldName} correct(e) (entre {params.min} et {params.max} caractères).',
+ Pattern: 'Indiquez un(e) {fieldName} valide.',
IsNumber: 'Indiquez un(e) {fieldName} valide.',
MinNumber: 'Veuillez indiquer un(e) {fieldName} supérieur(e) à {params}.',
MaxNumber: 'Veuillez indiquer un(e) {fieldName} inférieur(e) à {params}.',
diff --git a/packages/validate/translations/hu.js b/packages/validate/translations/hu.js
index b2f38e484..bd3b7ffa2 100644
--- a/packages/validate/translations/hu.js
+++ b/packages/validate/translations/hu.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Adjon meg egy helyes {fieldName} értéket (legfeljebb {params} karakter).',
MinMaxLength:
'Adjon meg egy helyes {fieldName} értéket ({params.min} és {params.max} karakter között).',
+ Pattern: 'Kérjük, adjon meg érvényes {fieldName} értéket.',
IsNumber: 'Kérjük, adjon meg érvényes {fieldName} értéket.',
MinNumber: 'Adjon meg egy {params} értéknél nagyobb {fieldName} értéket.',
MaxNumber: 'Adjon meg egy {params} értéknél alacsonyabb {fieldName} értéket.',
diff --git a/packages/validate/translations/it.js b/packages/validate/translations/it.js
index ea7cc96c7..096891345 100644
--- a/packages/validate/translations/it.js
+++ b/packages/validate/translations/it.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Inserire un(a) {fieldName} corretto(a) (fino a {params} caratteri).',
MinMaxLength:
'Inserire un(a) {fieldName} corretto(a) (tra {params.min} e {params.max} caratteri).',
+ Pattern: 'Inserire un valore valido per {fieldName}.',
IsNumber: 'Inserire un valore valido per {fieldName}.',
MinNumber: 'Inserire un(a) {fieldName} superiore a {params}.',
MaxNumber: 'Inserire un(a) {fieldName} inferiore a {params}.',
diff --git a/packages/validate/translations/nl.js b/packages/validate/translations/nl.js
index 4665b1212..40253fc09 100644
--- a/packages/validate/translations/nl.js
+++ b/packages/validate/translations/nl.js
@@ -5,6 +5,7 @@ export default {
MinLength: 'Vul een {fieldName} in van minimaal {params} karakters.',
MaxLength: 'Vul een {fieldName} in van maximaal {params} karakters.',
MinMaxLength: 'Vul een {fieldName} in tussen {params.min} en {params.max} karakters.',
+ Pattern: 'Vul een geldig(e) {fieldName} in.',
IsNumber: 'Vul een geldig(e) {fieldName} in.',
MinNumber: 'Vul een {fieldName} in van minimaal {params}.',
MaxNumber: 'Vul een {fieldName} in van maximaal {params}.',
diff --git a/packages/validate/translations/pl.js b/packages/validate/translations/pl.js
index 42908c0a0..9c33cfd98 100644
--- a/packages/validate/translations/pl.js
+++ b/packages/validate/translations/pl.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Proszę podać prawidłową wartość {fieldName} (maks. {params} znaków).',
MinMaxLength:
'Proszę podać prawidłową wartość {fieldName} (od {params.min} do {params.max} znaków).',
+ Pattern: 'Wprowadź prawidłową wartość w polu {fieldName}.',
IsNumber: 'Wprowadź prawidłową wartość w polu {fieldName}.',
MinNumber: 'Proszę podać wartość {fieldName} większą niż {params}.',
MaxNumber: 'Proszę podać wartość {fieldName} mniejszą niż {params}.',
diff --git a/packages/validate/translations/ro.js b/packages/validate/translations/ro.js
index ba3b3d918..8ffa29561 100644
--- a/packages/validate/translations/ro.js
+++ b/packages/validate/translations/ro.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Introduceți un/o {fieldName} corect(ă) (până la {params} (de) caractere).',
MinMaxLength:
'Introduceți un/o {fieldName} corect(ă) (între {params.min} și {params.max} (de) caractere).',
+ Pattern: 'Vă rugăm să introduceți un/o {fieldName} valid(ă).',
IsNumber: 'Vă rugăm să introduceți un/o {fieldName} valid(ă).',
MinNumber: 'Introduceți un/o {fieldName} mai mare decât {params}.',
MaxNumber: 'Introduceți un/o {fieldName} mai mic(ă) decât {params}.',
diff --git a/packages/validate/translations/ru.js b/packages/validate/translations/ru.js
index ae3311ef5..6b06a6104 100644
--- a/packages/validate/translations/ru.js
+++ b/packages/validate/translations/ru.js
@@ -6,6 +6,7 @@ export default {
MaxLength: 'Введите корректное значение поля {fieldName} (до {params} симв.).',
MinMaxLength:
'Введите корректное значение поля {fieldName} (от {params.min} до {params.max} симв.).',
+ Pattern: 'Введите действительное значение поля {fieldName}.',
IsNumber: 'Введите действительное значение поля {fieldName}.',
MinNumber: 'Введите значение поля {fieldName}, превышающее {params}.',
MaxNumber: 'Введите значение поля {fieldName} меньше, чем {params}.',
diff --git a/packages/validate/translations/sk.js b/packages/validate/translations/sk.js
index e4cc538ee..73d8b58a2 100644
--- a/packages/validate/translations/sk.js
+++ b/packages/validate/translations/sk.js
@@ -5,6 +5,7 @@ export default {
MinLength: 'Uveďte správne {fieldName} (najmenej {params}).',
MaxLength: 'Uveďte správne {fieldName} (maximálne {params} znakov).',
MinMaxLength: 'Uveďte správne {fieldName} ({params.min} až {params.max} znakov).',
+ Pattern: 'Zadajte platnú hodnotu do poľa {fieldName}.',
IsNumber: 'Zadajte platnú hodnotu do poľa {fieldName}.',
MinNumber: 'Uveďte {fieldName} s hodnotou viac ako {params}.',
MaxNumber: 'Uveďte {fieldName} s hodnotou menej ako {params}.',
diff --git a/packages/validate/translations/uk.js b/packages/validate/translations/uk.js
index 247a0ce9c..1dac856bc 100644
--- a/packages/validate/translations/uk.js
+++ b/packages/validate/translations/uk.js
@@ -7,6 +7,7 @@ export default {
MaxLength: 'Уведіть правильне значення {fieldName} (до {params} символів (-а)).',
MinMaxLength:
'Уведіть правильне значення {fieldName} (від {params.min} до {params.max} символів).',
+ Pattern: 'Введіть правильні дані {fieldName}.',
IsNumber: 'Введіть правильні дані {fieldName}.',
MinNumber: 'Уведіть значення {fieldName}, що перевищує {params}.',
MaxNumber: 'Уведіть значення {fieldName} менше від {params}.',
diff --git a/packages/validate/translations/zh.js b/packages/validate/translations/zh.js
index eb18eea05..d9ede8a02 100644
--- a/packages/validate/translations/zh.js
+++ b/packages/validate/translations/zh.js
@@ -5,6 +5,7 @@ export default {
MinLength: '請輸入正確的{fieldName}(長度至少{params}個字符)。',
MaxLength: '請輸入正確的{fieldName}(長度最多{params}個字符)。',
MinMaxLength: '請輸入正確的{fieldName}(長度在{params.min}和{params.max}個字符之間)。',
+ Pattern: '請輸入有效的{fieldName}。',
IsNumber: '請輸入有效的{fieldName}。',
MinNumber: '請輸入高於{params}的{fieldName}。',
MaxNumber: '请输入低于{params}的{fieldName}。',