refactor: 提取正则和验证到 @vben/utils
parent
44eebda749
commit
deb412662e
|
@ -7,10 +7,7 @@ import type { ComponentType } from './component';
|
||||||
|
|
||||||
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
|
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
|
||||||
import { $t } from '@vben/locales';
|
import { $t } from '@vben/locales';
|
||||||
|
import { isMobile } from '@vben/utils';
|
||||||
// TODO @xingyu:要不搞到全局的校验?
|
|
||||||
/** 手机号正则表达式(中国) */
|
|
||||||
const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/;
|
|
||||||
|
|
||||||
async function initSetupVbenForm() {
|
async function initSetupVbenForm() {
|
||||||
setupVbenForm<ComponentType>({
|
setupVbenForm<ComponentType>({
|
||||||
|
@ -45,7 +42,7 @@ async function initSetupVbenForm() {
|
||||||
mobile: (value, _params, ctx) => {
|
mobile: (value, _params, ctx) => {
|
||||||
if (value === undefined || value === null || value.length === 0) {
|
if (value === undefined || value === null || value.length === 0) {
|
||||||
return true;
|
return true;
|
||||||
} else if (!MOBILE_REGEX.test(value)) {
|
} else if (!isMobile(value)) {
|
||||||
return $t('ui.formRules.mobile', [ctx.label]);
|
return $t('ui.formRules.mobile', [ctx.label]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -55,7 +52,7 @@ async function initSetupVbenForm() {
|
||||||
if (value === undefined || value === null || value.length === 0) {
|
if (value === undefined || value === null || value.length === 0) {
|
||||||
return $t('ui.formRules.required', [ctx.label]);
|
return $t('ui.formRules.required', [ctx.label]);
|
||||||
}
|
}
|
||||||
if (!MOBILE_REGEX.test(value)) {
|
if (!isMobile(value)) {
|
||||||
return $t('ui.formRules.mobile', [ctx.label]);
|
return $t('ui.formRules.mobile', [ctx.label]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -7,9 +7,7 @@ import type { ComponentType } from './component';
|
||||||
|
|
||||||
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
|
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
|
||||||
import { $t } from '@vben/locales';
|
import { $t } from '@vben/locales';
|
||||||
|
import { isMobile } from '@vben/utils';
|
||||||
// TODO @xingyu:要不搞到全局的校验?
|
|
||||||
const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/;
|
|
||||||
|
|
||||||
async function initSetupVbenForm() {
|
async function initSetupVbenForm() {
|
||||||
setupVbenForm<ComponentType>({
|
setupVbenForm<ComponentType>({
|
||||||
|
@ -36,7 +34,7 @@ async function initSetupVbenForm() {
|
||||||
mobile: (value, _params, ctx) => {
|
mobile: (value, _params, ctx) => {
|
||||||
if (value === undefined || value === null || value.length === 0) {
|
if (value === undefined || value === null || value.length === 0) {
|
||||||
return true;
|
return true;
|
||||||
} else if (!MOBILE_REGEX.test(value)) {
|
} else if (!isMobile(value)) {
|
||||||
return $t('ui.formRules.mobile', [ctx.label]);
|
return $t('ui.formRules.mobile', [ctx.label]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -46,7 +44,7 @@ async function initSetupVbenForm() {
|
||||||
if (value === undefined || value === null || value.length === 0) {
|
if (value === undefined || value === null || value.length === 0) {
|
||||||
return $t('ui.formRules.required', [ctx.label]);
|
return $t('ui.formRules.required', [ctx.label]);
|
||||||
}
|
}
|
||||||
if (!MOBILE_REGEX.test(value)) {
|
if (!isMobile(value)) {
|
||||||
return $t('ui.formRules.mobile', [ctx.label]);
|
return $t('ui.formRules.mobile', [ctx.label]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -4,5 +4,4 @@ export * from './formatTime';
|
||||||
export * from './formCreate';
|
export * from './formCreate';
|
||||||
export * from './rangePickerProps';
|
export * from './rangePickerProps';
|
||||||
export * from './routerHelper';
|
export * from './routerHelper';
|
||||||
export * from './validator';
|
|
||||||
export { CommonStatusEnum } from '@vben/utils';
|
export { CommonStatusEnum } from '@vben/utils';
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
// 参数校验,对标 Hutool 的 Validator 工具类
|
|
||||||
// TODO @xingyu:要不要抽到 package 里?
|
|
||||||
|
|
||||||
/** 手机号正则表达式(中国) */
|
|
||||||
const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证是否为手机号码(中国)
|
|
||||||
*
|
|
||||||
* @param value 值
|
|
||||||
* @returns 是否为手机号码(中国)
|
|
||||||
*/
|
|
||||||
export function isMobile(value?: null | string): boolean {
|
|
||||||
if (!value) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return MOBILE_REGEX.test(value);
|
|
||||||
}
|
|
|
@ -7,8 +7,7 @@ import type { ComponentType } from './component';
|
||||||
|
|
||||||
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
|
import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
|
||||||
import { $t } from '@vben/locales';
|
import { $t } from '@vben/locales';
|
||||||
|
import { isMobile } from '@vben/utils';
|
||||||
const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/;
|
|
||||||
|
|
||||||
async function initSetupVbenForm() {
|
async function initSetupVbenForm() {
|
||||||
setupVbenForm<ComponentType>({
|
setupVbenForm<ComponentType>({
|
||||||
|
@ -39,7 +38,7 @@ async function initSetupVbenForm() {
|
||||||
mobile: (value, _params, ctx) => {
|
mobile: (value, _params, ctx) => {
|
||||||
if (value === undefined || value === null || value.length === 0) {
|
if (value === undefined || value === null || value.length === 0) {
|
||||||
return true;
|
return true;
|
||||||
} else if (!MOBILE_REGEX.test(value)) {
|
} else if (!isMobile(value)) {
|
||||||
return $t('ui.formRules.mobile', [ctx.label]);
|
return $t('ui.formRules.mobile', [ctx.label]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -49,7 +48,7 @@ async function initSetupVbenForm() {
|
||||||
if (value === undefined || value === null || value.length === 0) {
|
if (value === undefined || value === null || value.length === 0) {
|
||||||
return $t('ui.formRules.required', [ctx.label]);
|
return $t('ui.formRules.required', [ctx.label]);
|
||||||
}
|
}
|
||||||
if (!MOBILE_REGEX.test(value)) {
|
if (!isMobile(value)) {
|
||||||
return $t('ui.formRules.mobile', [ctx.label]);
|
return $t('ui.formRules.mobile', [ctx.label]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
// 参数校验,对标 Hutool 的 Validator 工具类
|
|
||||||
|
|
||||||
/** 手机号正则表达式(中国) */
|
|
||||||
const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证是否为手机号码(中国)
|
|
||||||
*
|
|
||||||
* @param value 值
|
|
||||||
* @returns 是否为手机号码(中国)
|
|
||||||
*/
|
|
||||||
export function isMobile(value?: null | string): boolean {
|
|
||||||
if (!value) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return MOBILE_REGEX.test(value);
|
|
||||||
}
|
|
|
@ -1,5 +1,6 @@
|
||||||
export * from './constants';
|
export * from './constants';
|
||||||
export * from './helpers';
|
export * from './helpers';
|
||||||
|
export * from './validator';
|
||||||
export * from '@vben-core/shared/cache';
|
export * from '@vben-core/shared/cache';
|
||||||
export * from '@vben-core/shared/color';
|
export * from '@vben-core/shared/color';
|
||||||
export * from '@vben-core/shared/utils';
|
export * from '@vben-core/shared/utils';
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from './regex';
|
||||||
|
export * from './validator';
|
|
@ -0,0 +1,18 @@
|
||||||
|
/** 手机号正则表达式(中国) */
|
||||||
|
const MOBILE_REGEX = /(?:0|86|\+86)?1[3-9]\d{9}/;
|
||||||
|
/** 身份证号正则表达式 */
|
||||||
|
const ID_CARD_REGEX = /^\d{15}|\d{18}$/;
|
||||||
|
/** 邮箱正则表达式 */
|
||||||
|
const EMAIL_REGEX = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
|
||||||
|
/** 密码正则表达式 以字母开头,长度在6~18之间,只能包含字母、数字和下划线 */
|
||||||
|
const PASSWORD_REGEX = /^[a-z]\w{5,17}$/i;
|
||||||
|
/** 强密码 必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间 */
|
||||||
|
const STRONG_PASSWORD_REGEX = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/;
|
||||||
|
|
||||||
|
export {
|
||||||
|
EMAIL_REGEX,
|
||||||
|
ID_CARD_REGEX,
|
||||||
|
MOBILE_REGEX,
|
||||||
|
PASSWORD_REGEX,
|
||||||
|
STRONG_PASSWORD_REGEX,
|
||||||
|
};
|
|
@ -0,0 +1,16 @@
|
||||||
|
import { MOBILE_REGEX } from './regex';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证是否为手机号码(中国)
|
||||||
|
*
|
||||||
|
* @param value 值
|
||||||
|
* @returns 是否为手机号码(中国)
|
||||||
|
*/
|
||||||
|
function isMobile(value?: null | string): boolean {
|
||||||
|
if (!value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return MOBILE_REGEX.test(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
export { isMobile };
|
Loading…
Reference in New Issue