UNPKG

@ithinkdt/core

Version:

iThinkDT Core

45 lines (43 loc) 1.75 kB
import { unref } from 'vue' function pattern(pattern, message, { trigger = 'blur' } = {}) { return { message, trigger, validator: (value) => { if (value === undefined || value === null) { return } const _p = unref(pattern) if (!_p) return const p = typeof _p === 'string' ? new RegExp(`${_p.startsWith('^') ? '' : '^'}${_p}${_p.endsWith('$') ? '' : '$'}`) : _p return p.test(value) }, } } const email = (message, options) => pattern( /^(?=.{1,254}$)(?=.{1,64}@)[\w!#$%&'*+/=?^`{|}~-]+(?:\.[\w!#$%&'*+/=?^`{|}~-]+)*@[\dA-Za-z](?:[\dA-Za-z-]{0,61}[\dA-Za-z])?(?:\.[\dA-Za-z](?:[\dA-Za-z-]{0,61}[\dA-Za-z])?)*$/, message, options, ) const phone = (message, options) => pattern(/^1\d{10}$/, message, options) const url = (message, options) => pattern(/^((https?|ftp|file):\/\/)?([\d.a-z-]+)\.([.a-z]{2,6})([\w ./-]*)*\/?$/, message, options) const idNo = (message, options) => pattern( /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[\dXx]$/, message, options, ) const plateNo = (message, options) => pattern( /^[A-Z云京使冀吉宁川新晋桂沪津浙渝湘琼甘皖粤苏蒙藏豫贵赣辽鄂闽陕青领鲁黑][A-Z][DF|]?[\dA-Z]{4}[\dA-Z学挂港澳警]$/, message, options, ) const noChinese = (message, options) => pattern(/^[^\u4E00-\u9FA5]+$/, message, options) const chinese = (message, options) => pattern(/^[\u4E00-\u9FA5]+$/, message, options) export { pattern, email, phone, url, idNo, plateNo, noChinese, chinese }