@ecip/ecip-web
Version:
A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features
402 lines (369 loc) • 11.1 kB
JavaScript
const validMin_Max = (min, max, value) => {
let valid = true
if (min) {
valid = min < value
}
if (max) {
valid = max > value
}
return valid
}
// 字符串校验
const string = (rule, value, callback) => {
if (isNaN(value)) {
callback(new Error('只能填写数字'))
}
let valid = true
if (rule.min) {
valid = rule.minLength < value
}
if (rule.max) {
valid = rule.maxLength > value
}
if (!valid) {
const errorMsg = `${rule.minLength ? `值不能小于${rule.minLength}, ` : ''}${rule.maxLength ? `值不能大于${rule.maxLength}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 电子邮件校验
const email = (rule, value, callback, source, options) => {
const pattern = /^$|^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,6})+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('邮箱格式不正确'))
}
callback()
}
// 网址校验
const website = (rule, value, callback) => {
const pattern = /^$|(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的网址'))
}
callback()
}
// 日期校验 element自带
// 日期ISO校验
const date = (rule, value, callback) => {
const pattern = /^$|^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的日期(ISO:yyyy-mm-dd或yyyy/mm/dd)'))
}
callback()
}
// 日期ISO校验
const dateISO = (rule, value, callback) => {
const pattern = /^$|^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的日期(ISO:yyyy-mm-dd或yyyy/mm/dd)'))
}
callback()
}
// 信用卡号校验
const cardNumber = (rule, value, callback) => {
const pattern = /^(4\\d{12}(?:\\d{3})?)$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的信用卡号码'))
}
callback()
}
// 电话号码
const phoneNumber = (rule, value, callback) => {
const pattern = /^$|^(\d{3,4}-?)?\d{7,9}$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('电话号码格式校验失败'))
}
callback()
}
// 手机号码校验
const mobilePhoneNumber = (rule, value, callback) => {
if (value == null || value === '') {
callback()
}
const pattern = /^[1][3456789][0-9]{9}$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('手机号码格式校验失败'))
}
callback()
}
// 手机/电话校验
const mobilePhoneOrPhone = (rule, value, callback) => {
const pattern = /^$|^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的手机/电话号码'))
}
callback()
}
// QQ号码校验
const qqNumber = (rule, value, callback) => {
const pattern = /^$|^[1-9]\d{4,12}$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的QQ号码'))
}
callback()
}
// 身份证号码校验
const idNumber = (rule, value, callback) => {
const pattern = /^$|(^\d{15}$)|(^\d{17}(x|X|\d)$)/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的身份证号'))
}
callback()
}
// 数字校验
const number = (rule, value, callback) => {
if (isNaN(value)) {
callback(new Error(`${value}不是数字`))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 整数校验
const integer = (rule, value, callback) => {
const pattern = /^$|^-?\d+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入整数'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 整数(大于0)校验
const positiveInteger = (rule, value, callback) => {
const pattern = /^$|^[0-9]*[1-9][0-9]*$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写正整数(大于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 整数(大于等于0)校验
const nonNegativeInteger = (rule, value, callback) => {
const pattern = /^$|^\d+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写正整数(大于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 整数(小于0)校验
const negativeInteger = (rule, value, callback) => {
const pattern = /^$|^-[0-9]*[1-9][0-9]*$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写整数(小于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 整数(小于等于0)校验
const nonPositiveInteger = (rule, value, callback) => {
const pattern = /^$|^((-\d+)|(0+))$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写整数(小于等于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 浮点数(大于0)校验
const positiveFloatingPoint = (rule, value, callback) => {
const pattern = /^$|^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写正浮点数(大于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 浮点数(大于等于0)校验
const nonNegativeFloatingPoint = (rule, value, callback) => {
const pattern = /^$|^\d+(\.\d+)?$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写非负浮点数(大于等于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 浮点数(小于0)校验
const negativeFloatingPoint = (rule, value, callback) => {
const pattern = /^$|^-[1-9]\d*\.\d*|-0\.\d*[1-9]\d*$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写负浮点数(小于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 浮点数(小于等于0)校验
const nonPositiveFloatingPoint = (rule, value, callback) => {
const pattern = /^$|^((-\d+(\.\d+)?)|(0+(\.0+)?))$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('只能填写非正浮点数(小于等于0)'))
}
const valid = validMin_Max(rule.min, rule.max)
if (!valid) {
const errorMsg = `${rule.min ? `值不能小于${rule.min}, ` : ''}${rule.max ? `值不能大于${rule.max}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 邮政编码
const postalCode = (rule, value, callback) => {
const pattern = /^$|^[0-9]{6}$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入正确的邮政编码'))
}
callback()
}
// 密码
const password = (rule, value, callback) => {
const minLength = rule.minLength || 6
const maxLength = rule.maxLength || 16
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\\W]{minLength,maxLength}$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('密码只能包含英文字符、数字和下划线'))
}
const valid = validMin_Max(minLength, maxLength, value.length)
if (!valid) {
const errorMsg = `${minLength ? `密码长度不能小于${minLength}, ` : ''}${maxLength ? `密码长度不能大于${maxLength}` : ''}`
callback(new Error(errorMsg))
}
callback()
}
// 中文/英文/数字/下划线
const chineseEnglishNumbersUnderlines = (rule, value, callback) => {
const pattern = /^$|^[a-zA-Z0-9\u4e00-\u9fa5-_]+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入中文/英文/数字/下划线'))
}
callback()
}
// 英语
const english = (rule, value, callback) => {
const pattern = /^$|^[A-Za-z]+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入英文字符'))
}
callback()
}
// 汉字
const chinese = (rule, value, callback) => {
const pattern = /^$|^[\u4e00-\u9fa5]+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入中文字符'))
}
callback()
}
// 英汉字符
const englishOrChineseCharacters = (rule, value, callback) => {
const pattern = /^$|^[\u0391-\uFFE5]+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入英汉字符'))
}
callback()
}
// 合法字符
const legalCharacters = (rule, value, callback) => {
const pattern = /^$|^[A-Za-z0-9_-]+$/
var reg = new RegExp(pattern)
if (!reg.test(value)) {
callback(new Error('请输入合法字符(a-zA-Z0-9)'))
}
callback()
}
// -----------------------------------------------------------------------------------
const validator = {
string,
email,
website,
date,
dateISO,
cardNumber,
phoneNumber,
mobilePhoneNumber,
mobilePhoneOrPhone,
qqNumber,
idNumber,
number,
integer,
positiveInteger,
nonNegativeInteger,
negativeInteger,
nonPositiveInteger,
positiveFloatingPoint,
nonNegativeFloatingPoint,
negativeFloatingPoint,
nonPositiveFloatingPoint,
postalCode,
password,
chineseEnglishNumbersUnderlines,
english,
chinese,
englishOrChineseCharacters,
legalCharacters
}
export default {
validator,
data() {
return {
validator
}
}
}