@ithinkdt/core
Version:
iThinkDT Core
45 lines (43 loc) • 1.75 kB
JavaScript
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 }