@astral/validations 4.16.0 → 4.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/email/constants.d.ts +2 -0
- package/email/constants.js +2 -0
- package/email/email.d.ts +7 -1
- package/email/email.js +11 -4
- package/package.json +1 -1
package/README.md
CHANGED
@@ -379,7 +379,7 @@ validate('long string')
|
|
379
379
|
|
380
380
|
### email
|
381
381
|
|
382
|
-
Проверяет валиден ли email.
|
382
|
+
Проверяет валиден ли email. Работает с русскими доменами и punycode
|
383
383
|
|
384
384
|
```ts
|
385
385
|
import { string, email } from '@astral/validations';
|
@@ -393,11 +393,21 @@ validate('example@mail.ru');
|
|
393
393
|
// { message: 'Некорректный E-mail' }
|
394
394
|
validate('example.ru');
|
395
395
|
|
396
|
+
|
396
397
|
//Пользовательское сообщение для ошибки с максимальным количеством символов
|
397
398
|
const validateEmail = email({ invalidLengthMessage: 'слишком длинный email' });
|
398
399
|
|
399
400
|
// { message: 'слишком длинный email' }
|
400
401
|
validateEmail('longlonglong.......')
|
402
|
+
|
403
|
+
//Проверка email с разрешенной кирилицей и punycode
|
404
|
+
const validateCyrillicEmail = email({ allowCyrillic: true });
|
405
|
+
|
406
|
+
// undefined
|
407
|
+
validateCyrillicEmail('test@домен.рф')
|
408
|
+
|
409
|
+
// undefined
|
410
|
+
validateCyrillicEmail('asdasd@xn--h1alffa9fa.xn--p1ai')
|
401
411
|
```
|
402
412
|
|
403
413
|
---
|
package/email/constants.d.ts
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
import { type ErrorInfo } from '../core';
|
2
2
|
export declare const EMAIL_REGEXP: RegExp;
|
3
|
+
export declare const EMAIL_CYRILLIC_PUNYCODE_REGEXP: RegExp;
|
3
4
|
export declare const EMAIL_MAX_LENGTH = 254;
|
5
|
+
export declare const PUNYCODE_REGEXP: RegExp;
|
4
6
|
export declare const INVALID_EMAIL_ERROR_INFO: ErrorInfo;
|
5
7
|
export declare const LENGTH_EMAIL_ERROR_INFO: ErrorInfo;
|
6
8
|
export declare const DOUBLE_DOTS_EMAIL_ERROR_INFO: ErrorInfo;
|
package/email/constants.js
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
import { createErrorCode } from '../core';
|
2
2
|
export const EMAIL_REGEXP = /^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,}$/;
|
3
|
+
export const EMAIL_CYRILLIC_PUNYCODE_REGEXP = /^[-\w.<+]*\w+@((([A-z0-9][-_A-z0-9]+)|([А-яЁё0-9][-_А-яЁё0-9]+)|(xn--[a-z0-9]+))\.)+?(([A-zА-яЁё]{2,})|(xn--[a-z0-9]+))$/;
|
3
4
|
export const EMAIL_MAX_LENGTH = 254;
|
5
|
+
export const PUNYCODE_REGEXP = /^xn--/;
|
4
6
|
export const INVALID_EMAIL_ERROR_INFO = {
|
5
7
|
code: createErrorCode('email-invalid'),
|
6
8
|
message: 'Некорректный E-mail',
|
package/email/email.d.ts
CHANGED
@@ -11,9 +11,15 @@ type EmailParams = {
|
|
11
11
|
* Замена стандартного сообщения ошибки для повторяющихся точек.
|
12
12
|
*/
|
13
13
|
doubleDotsErrorMessage?: string;
|
14
|
+
/**
|
15
|
+
* Разрешение символов кирилицы и punycode
|
16
|
+
*/
|
17
|
+
allowCyrillic?: boolean;
|
14
18
|
};
|
15
19
|
/**
|
16
|
-
* Проверяет валидность email.
|
20
|
+
* Проверяет валидность email.
|
21
|
+
* Работает с русскими доменами и punycode через параметр allowCyrillic.
|
22
|
+
* punycode приходит на фронте только из input type='email'.
|
17
23
|
* @example
|
18
24
|
* ```ts
|
19
25
|
* const validate = string(email());
|
package/email/email.js
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
import { createRule } from '../core';
|
2
|
-
import { DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_EMAIL_ERROR_INFO, LENGTH_EMAIL_ERROR_INFO, } from './constants';
|
2
|
+
import { DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_CYRILLIC_PUNYCODE_REGEXP, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_EMAIL_ERROR_INFO, LENGTH_EMAIL_ERROR_INFO, PUNYCODE_REGEXP, } from './constants';
|
3
3
|
/**
|
4
|
-
* Проверяет валидность email.
|
4
|
+
* Проверяет валидность email.
|
5
|
+
* Работает с русскими доменами и punycode через параметр allowCyrillic.
|
6
|
+
* punycode приходит на фронте только из input type='email'.
|
5
7
|
* @example
|
6
8
|
* ```ts
|
7
9
|
* const validate = string(email());
|
@@ -10,7 +12,10 @@ import { DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_E
|
|
10
12
|
*/
|
11
13
|
export const email = (params) => createRule((value, ctx) => {
|
12
14
|
const invalidEmailError = ctx.createError(Object.assign(Object.assign({}, INVALID_EMAIL_ERROR_INFO), { message: (params === null || params === void 0 ? void 0 : params.message) || INVALID_EMAIL_ERROR_INFO.message }));
|
13
|
-
|
15
|
+
const emailRegexp = (params === null || params === void 0 ? void 0 : params.allowCyrillic)
|
16
|
+
? EMAIL_CYRILLIC_PUNYCODE_REGEXP
|
17
|
+
: EMAIL_REGEXP;
|
18
|
+
if (!emailRegexp.test(value)) {
|
14
19
|
return invalidEmailError;
|
15
20
|
}
|
16
21
|
if (value.length > EMAIL_MAX_LENGTH) {
|
@@ -27,7 +32,9 @@ export const email = (params) => createRule((value, ctx) => {
|
|
27
32
|
return ctx.createError(Object.assign(Object.assign({}, DOUBLE_DOTS_EMAIL_ERROR_INFO), { message: (params === null || params === void 0 ? void 0 : params.doubleDotsErrorMessage) ||
|
28
33
|
DOUBLE_DOTS_EMAIL_ERROR_INFO.message }));
|
29
34
|
}
|
30
|
-
if (hostname
|
35
|
+
if (!PUNYCODE_REGEXP.test(hostname) &&
|
36
|
+
hostname[2] === '-' &&
|
37
|
+
hostname[3] === '-') {
|
31
38
|
return invalidEmailError;
|
32
39
|
}
|
33
40
|
return undefined;
|