const pattern = { /** 空格 */ space: /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, /** 数字 */ number: /^\d+$/, /** 大写,小写,数字及特殊字符 */ char: /((?=[\x21-\x7e]+)[^A-Za-z0-9])/, /** 姓名 */ name: /^[\u4e00-\u9fa5]{1,20}$/, /** 手机号 */ tel: /^1\d{10}$/, /** 座机号 */ landline: /^((0\d{2,3})-)(\d{7,8})(-(\d{1,3}))?$/, /** 金额 */ price: /^[0-9]+(.[0-9]{1,2})?$/, /** 正数 */ integer: /^(-|\+)?\d+$/, /** 身份证号 */ // tslint:disable-next-line:max-line-length idcard: /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0\d|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/, // /** emoji */ emoji: /\ud83c[\udf00-\udfff]|\ud83d[\udc00-\ude4f]|\ud83d[\ude80-\udeff]/g, email: /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/, url: /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/ }; function test(value: string, key: keyof typeof pattern) { const regexp = new RegExp(pattern[key]); return regexp.test(value); } export const validate = { /** 空格 */ // space: /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, /** 数字 */ number: (value: string) => test(value, 'number'), /** 大写,小写,数字及特殊字符 */ // char: /((?=[\x21-\x7e]+)[^A-Za-z0-9])/, /** 姓名 */ name: (value: string) => test(value, 'name'), /** 手机号 */ tel: (value: string) => test(value, 'tel'), /** 邮箱 */ email: (value: string) => test(value, 'email'), // /** 座机号 */ // landline: /^((0\d{2,3})-)(\d{7,8})(-(\d{1,3}))?$/, /** 金额 */ price: (value: string) => test(value, 'price'), /** 正数 */ integer: (value: string) => test(value, 'integer'), /** 身份证号 */ idcard: (value: string) => test(value, 'idcard'), url: (value: string) => test(value, 'url'), emoji: (value: string) => test(value, 'emoji'), };