/* eslint-disable eol-last */
/**
* Created by jiachenpan on 16/11/18.
*/
export function deviceNo (rule, value, callback) {
let reg = /^[\da-zA-Z_-]{1,64}$/
if (!reg.test(value)) {
callback(new Error())
} else {
callback()
}
}
export const clickoutside = {
bind (el, binding, vnode) {
function documentHandler (e) {
if (el.contains(e.target)) {
return false
}
if (binding.expression) {
binding.value(e)
}
}
el.__vueClickOutside__ = documentHandler
document.addEventListener('click', documentHandler)
},
update () { },
unbind (el, binding) {
document.removeEventListener('click', el.__vueClickOutside__)
delete el.__vueClickOutside__
}
}
export function warranty (rule, value, callback) {
let reg = /^\d{0,255}$/
if (!reg.test(value)) {
callback(new Error())
} else {
callback()
}
}
export function price (rule, value, callback) {
const reg = /^(([1-9]\d{0,7})|(0?))(\.\d)?$/
if (!reg.test(value)) {
callback(new Error())
} else {
callback()
}
}
export function dataTimrangeValidate (rule, value, callback) {
if (JSON.stringify(value) === '["",""]') {
return callback(new Error('请选择课程时间'))
} else {
callback()
}
}
export function textValidate (rule, value, callback) {
const afterTrimValue = value.trim()
if (afterTrimValue.length === 0) {
return callback(new Error('不能全是空格'))
} else if (value.length !== afterTrimValue.length) {
return callback(new Error('开头和结尾不能为空格'))
} else {
callback()
}
}
export function isRiskPwd (rule, value, callback) {
var count = 0
var reg = [/\W+/, /[a-z]+/, /[A-Z]+/, /[0-9]+/]
if (value.length >= 8) {
for (var r = 0; r < reg.length; r++) {
if (reg[r].test(value)) {
count++
}
}
}
return count > 1
}
export function validateEventLinkageConfigNameLength (rule, value, callback) {
if (value.trim().length === 0) {
callback(new Error('请输入规则名称,不超过32个字符'))
} else {
callback()
}
}
export function validateEventLinkageOnlineRate (rule, value, callback) {
if (Number(value) && value > 0 && value < 100 && (String(value).split('.').length === 1 || (String(value).split('.').length === 2 && String(value).split('.')[1].length < 3))) {
callback()
} else {
callback(new Error('请输入数字,在0-100之间,且最多保留两位小数'))
}
}
// 汉字
export function validateEventChactor (rule, value, callback) {
var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi
if (!patrn.exec(value)) {
callback()
} else {
callback(new Error('不能输入中文,请重新输入'))
}
}
export function nameValidator (rule, value, callback) {
if (value.length <= 0 || value.length > 30) {
callback(new Error('不可为空,长度最大30位'))
} else if (!isValidSLAName(value)) {
callback(new Error('只能由汉字,字母和数字组成'))
} else {
callback()
}
}
export function validateReferenceValue (rule, value, callback) {
const reg = /^[1-9][0-9]*$/
if (value.length > 2) {
callback(new Error('请输入正整数次数,限2位'))
} else if (!reg.test(value)) {
callback(new Error('请输入正整数次数,限2位'))
} else {
callback()
}
}
export function validateCustomerCoName (rule, value, callback) {
const reg = /^[\u4E00-\u9FA5A-Za-z0-9()()]+$/
if (!reg.test(value) || value.trim().length > 60) {
callback(new Error('请输入单位名称,限60字符内中文、英文、数字、括弧'))
} else {
callback()
}
}
export function validateCycleTime (rule, value, callback) {
const reg = /^[1-9][0-9]*$/
if (value.length > 5) {
callback(new Error('请输入正整数天数,限5位'))
} else if (!reg.test(value)) {
callback(new Error('请输入正整数天数,限5位'))
} else {
callback()
}
}
export function validateEmail (rule, value, callback) {
const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
if (value === '') {
callback()
}
if (!reg.test(value)) {
callback(new Error('请输入正确邮箱地址'))
} else {
callback()
}
}
export function validateIdCard (rule, value, callback) {
if (value === '') {
callback()
}
const city = {
11: '北京',
12: '天津',
13: '河北',
14: '山西',
15: '内蒙古',
21: '辽宁',
22: '吉林',
23: '黑龙江',
31: '上海',
32: '江苏',
33: '浙江',
34: '安徽',
35: '福建',
36: '江西',
37: '山东',
41: '河南',
42: '湖北 ',
43: '湖南',
44: '广东',
45: '广西',
46: '海南',
50: '重庆',
51: '四川',
52: '贵州',
53: '云南',
54: '西藏',
61: '陕西',
62: '甘肃',
63: '青海',
64: '宁夏',
65: '新疆',
71: '台湾',
81: '香港',
82: '澳门',
91: '国外 '
}
if (
!/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/i.test(
value
)
) {
callback(new Error('请输入正确的身份证号'))
} else if (!city[value.substr(0, 2)]) {
callback(new Error('请输入正确的身份证号'))
} else {
callback()
}
};
export function validateCompanyName (rule, value, callback) {
if (value === '') {
callback()
}
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]{1,20}$/
if (!reg.test(value)) {
callback(new Error('只能输入汉字,字母和数字,1-20个字符'))
} else {
callback()
}
}
// 是否是由汉字数字组成的合法名称*/
export function validateUserName (rule, value, callback) {
const reg = /^[\u4e00-\u9fa5][\u4e00-\u9fa50-9]{1,10}$/
if (!reg.test(value)) {
callback(new Error('请输入正确的姓名'))
} else {
callback()
}
};
// 是否是由汉字数字字母组成的合法名称*/
export function validateOrgName (rule, value, callback) {
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]{1,20}$/
if (value === '') {
callback(new Error('请输入组织名称'))
}
if (!reg.test(value)) {
callback(new Error('组织名称由中文英文数字组成,1-20个字符'))
} else {
callback()
}
};
// 是否字母数字_组成的合法code*/
export function validateAccountName (rule, value, callback) {
const reg = /^[A-Za-z][A-Za-z0-9_-]{3,19}$/
if (value === '') {
callback()
}
if (!reg.test(value)) {
callback(
new Error('账户名首位为字母其余字母、数字、连接符、下划线组成4~20个字符')
)
} else {
callback()
}
};
export function validateComponyName (rule, value, callback) {
const companyNameReg = /^[A-Za-z0-9\u4e00-\u9fa5]{1,20}$/
if (!companyNameReg.test(value)) {
callback(new Error('只能输入汉字,大小写字母或数字1到20个字符'))
} else {
callback()
}
}
// 是否是由大小写字母,数字和_组成的合法模块编码*/
export function isValidModuleCode (str) {
const reg = /^[A-Za-z0-9_]+$/
return reg.test(str)
}
// 是否是由汉字,字母,数字组成的合法模块名称*/
export function isValidModuleName (str) {
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
return reg.test(str)
}
// 是否正整数*/
export function isNumber (str) {
const reg = /^[1-9][0-9]*$/
return reg.test(str)
}
// 请输入正数(含浮点数)
export function numP (rule, value, callback) {
if (value === '' || (value - parseFloat(value) >= 0 && !/[-]/.test(value) && Number(value) !== 0)) {
callback()
} else {
callback(new Error('请输入正数!'))
}
}
export function validateIsNumber (rule, value, callback) {
const reg = /^[1-9][0-9]*$/
if (value !== '' && !reg.test(value)) {
callback(new Error('请输入数字'))
} else {
callback()
}
}
export function isValidRoleName (str) {
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
return reg.test(str)
}
// 是否是由大写字母和_组成的合法角色编码*/
export function isValidRoleCode (str) {
const reg = /^[A-Z_]+$/
return reg.test(str)
}
export function validateCorporation (rule, value, callback) {
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]{1,20}$/
if (value !== '' && !reg.test(value)) {
callback(new Error('只能输入汉字,大小写字母或数字1到20个字符'))
} else {
callback()
}
}
export function validateNumber (rule, value, callback) {
const reg = /^[1-9][0-9]*$/
if (value === '') {
callback()
}
if (!reg.test(value)) {
callback(new Error('排序号只能是正整数'))
} else {
callback()
}
}
// 是否是由汉字数字组成的合法名称*/
export function validame (str) {
const reg = /^[\u4e00-\u9fa5][\u4e00-\u9fa50-9]{1,10}$/
return reg.test(str)
}
// 是否是邮箱
export function isEmail (str) {
const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
return reg.test(str)
}
// 是否是手机
export function isPhone (str) {
const reg = /^1[3456789]\d{9}$/
return reg.test(str)
}
/*
* 校验联系电话,支持手机和固定电话,固定电话包含400,800
*/
export function validatePhone (rule, value, callback) {
if (!value || (value && value.trim() === '')) {
callback()
}
const reg = /^(0[0-9]{2,3})?(-| )?([2-9][0-9]{6,7})$/
const regMobile = /^1[3456789]\d{9}$/
const reg48 = /^[48]00(-| )?(([0-9]{3}(-| )?[0-9]{4})|([0-9]{4}(-| )?[0-9]{3}))$/
if (!reg.test(value) && !regMobile.test(value) && !reg48.test(value)) {
callback(new Error('请输入正确的手机号或座机号'))
} else {
callback()
}
}
export function testLongitude (r, v, cb) {
if (!v || (v && v.trim() === '')) {
cb()
} else {
if (/^(-?\d+)(\.\d+)?$/.test(v)) {
const longitude = Math.abs(parseFloat(v))
if (longitude <= 180) {
cb()
} else {
cb(new Error('请输入-180 ~ 180度的经度'))
}
} else {
cb(new Error('请输入数字'))
}
}
}
export function validateClientName (r, v, cb) {
if (v) {
if (v.trim().length > 64) {
cb(new Error('请限制输入字数在64位以内'))
} else {
if (isValidContent(v)) {
cb(new Error('请输入合法内容(不含‘@,%,&’等字符)'))
} else {
cb()
}
}
} else {
cb()
}
}
export function validateTitle (r, v, cb) {
if (v) {
if (v.length > 50) {
cb(new Error('输入超出限制,请小于50个字符'))
} else {
if (isValidContent(v)) {
cb(new Error('请输入合法内容(不含‘@,%,&’等字符)'))
} else {
cb()
}
}
} else {
cb()
}
}
export function validateOtherMethod (r, v, cb) {
if (v.trim()) {
if (v.trim().length > 300) {
cb(new Error('请限制输入字数在300位以内'))
} else {
if (isValidContent(v)) {
cb(new Error('请输入合法内容(不含‘@,%,&’等字符)'))
} else {
cb()
}
}
} else {
cb(new Error('输入内容不能为空'))
}
}
export function testLatitude (r, v, cb) {
if (!v || (v && v.trim() === '')) {
cb()
} else {
if (/^(-?\d+)(\.\d+)?$/.test(v)) {
const latitude = Math.abs(parseFloat(v))
if (latitude <= 90) {
cb()
} else {
cb(new Error('请输入-90 ~ 90度的纬度'))
}
} else {
cb(new Error('请输入数字'))
}
}
}
// 是否是由汉字,字母,数字组成的合法项目名称*/
export function isValidProjectName (str) {
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
return reg.test(str)
}
// 是否含非法字符
export function isValidContent (str) {
const reg = /[`~@#<>$%^&*]/im
return reg.test(str)
}
// 是否是由字母,数字组成的合法项目合同编号*/
export function isValidContractNum (str) {
const reg = /^[A-Za-z0-9]+$/
return reg.test(str)
}
// 是否是由汉字,字母,数字组成的合法SLA名称*/
export function isValidSLAName (str) {
const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
return reg.test(str)
}
// 是否数字*/
export function isFloat (str) {
const reg = /^(-?\d+)(\.\d+)?$/
return reg.test(str)
}
// 是否字母数字_组成的合法code*/
export function isValidCode (str) {
const reg = /^[a-zA-Z0-9_]+$/
return reg.test(str)
}
// 合法uri*/
export function validateURL (textval) {
const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
return urlregex.test(textval)
}
// 小写字母*/
export function validateLowerCase (str) {
const reg = /^[a-z]+$/
return reg.test(str)
}
// 验证key*/
// export function validateKey(str) {
// var reg = /^[a-z_\-:]+$/;
// return reg.test(str);
// }
// 大写字母*/
export function validateUpperCase (str) {
const reg = /^[A-Z]+$/
return reg.test(str)
}
// 大小写字母*/
export function validatAlphabets (str) {
const reg = /^[A-Za-z]+$/
return reg.test(str)
}
// 身份证号合法性验证
// 支持15位和18位身份证号
// 支持地址编码、出生日期、校验位验证
export function identityCodeValid (code) {
let city = { 11: '北京', 12: '天津', 13: '河北', 14: '山西', 15: '内蒙古', 21: '辽宁', 22: '吉林', 23: '黑龙江', 31: '上海', 32: '江苏', 33: '浙江', 34: '安徽', 35: '福建', 36: '江西', 37: '山东', 41: '河南', 42: '湖北 ', 43: '湖南', 44: '广东', 45: '广西', 46: '海南', 50: '重庆', 51: '四川', 52: '贵州', 53: '云南', 54: '西藏', 61: '陕西', 62: '甘肃', 63: '青海', 64: '宁夏', 65: '新疆', 71: '台湾', 81: '香港', 82: '澳门', 91: '国外 ' }
let pass = true
if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {
pass = false
} else if (!city[code.substr(0, 2)]) {
pass = false
} else {
// 18位身份证需要验证最后一位校验位
// if (code.length === 18) {
// code = code.split('')
// // ∑(ai×Wi)(mod 11)
// // 加权因子
// let factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]
// // 校验位
// let parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]
// let sum = 0
// let ai = 0
// let wi = 0
// for (let i = 0; i < 17; i++) {
// ai = code[i]
// wi = factor[i]
// sum += ai * wi
// }
// if (parity[sum % 11] !== code[17]) {
// pass = false
// }
// }
}
return pass
}
/* 是否合法IP地址 */
export function checkIp (rule, value, callback) {
if (value == '' || value == undefined || value == null) {
callback()
} else {
const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
if ((!reg.test(value))) {
callback(new Error('IP格式不正确'))
} else {
callback()
}
}
}
export function checkPort (rule, value, callback) {
let parten = /^(\d)+$/g
if (!value) {
return callback(new Error('输入不可以为空'))
} else if (!(parten.test(value) && parseInt(value) <= 65535 && parseInt(value) >= 0)) {
callback(new Error('端口格式不正确'))
} else {
callback()
}
}
export function checkname (rule, value, callback) {
let name = /^[0-9a-zA-Z-_'\u4e00-\u9fa5]+$/
if (!value) {
return callback(new Error('名称由数字、字符、中文组成'))
} else if (!name.test(value)) {
callback(new Error('名称由数字、字符、中文组成'))
} else {
callback()
}
}
export function checkProbename (rule, value, callback) {
let name = /^[0-9a-zA-Z-_'\u4e00-\u9fa5]{3,50}$/
if (!value) {
return callback(new Error('名称由数字、字符、中文组成3-50位'))
} else if (!name.test(value)) {
callback(new Error('名称由数字、字符、中文组成3-50位'))
} else {
callback()
}
}
export function checkTemplateName (rule, value, callback) {
let name = /^[0-9a-zA-Z-_'\u4e00-\u9fa5]{3,14}$/
if (!value) {
return callback(new Error('名称由数字、字符、中文组成3-14位'))
} else if (!name.test(value)) {
callback(new Error('名称由数字、字符、中文组成3-14位'))
} else {
callback()
}
}
// 密码等级*/
export function getPwdRank (input, userName) {
// (1)等级0(风险口令):口令长度小于8字节,或只包含4类字符中的任意一类,或口令与用户名一样,或口令是用户名的倒写
// (2)等级1(弱口令):包含两类字符,且组合为(数字+小写字母)或(数字+大写字母),且长度大于等于8字节。
// (3)等级2(中口令):包含两类字符,且组合不能为(数字+小写字母)或(数字+大写字母),且长度大于等于8字节。
// (4)等级3(强口令):包含三类字符及以上,且长度大于等于8字节
if (!input) {
return ''
}
if (input.length < 8 || input === userName || input === userName.split('').reverse().join('')) {
return 1
}
let iRank = 0
input.match(/[a-z]/g) && iRank++
input.match(/[A-Z]/g) && iRank++
input.match(/[0-9]/g) && iRank++
// eslint-disable-next-line
const reg = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/i
if (reg.test(input)) {
if (iRank === 1) {
return 3
} else {
iRank++
}
}
return iRank === 3 ? 4 : iRank
}
// 最多两位小数
export function fixTwo (rule, value, callback) {
if (/^\d+(\.\d{0,2})?$/.test(value)) {
callback()
} else {
callback(new Error('最多输入两位小数!'))
}
}
// 非负整数(0和正整数)
export function integerZP (rule, value, callback) {
if (value === '' || /^\d+$/.test(value)) {
callback()
} else {
callback(new Error('请输入非负整数!'))
}
}
// 最大长度限制
export function maxLength (rule, value, callback) {
var len = 200
var temp = 0
for (var i = 0; i < value.length; i++) {
if (/[\u4e00-\u9fa5]/.test(value[i])) {
temp += 2
} else {
temp++
}
if (temp > len) {
callback(new Error('内容过长,超过最大限度'))
}
}
}
export function maxValue (rule, value, callback) {
if (value === '' || value <= rule.maxValue) {
callback()
} else {
callback(new Error(`最大值${rule.maxValue}`))
}
}
// 正整数
export function integerP (rule, value, callback) {
if (value === '' || /^[0-9]*[1-9][0-9]*$/.test(value)) {
callback()
} else {
callback(new Error('请输入正整数!'))
}
}
/**
* 数字,0-100,最多支持两位小数
*/
export function numOfMaxTwoDecimal (rule, value, callback) {
if (/^(0?(\.\d{1,2})?|[1-9][0-9]?(\.\d{1,2})?|100(\.[0]{1,2})?)$/.test(value)) {
callback()
} else {
callback(new Error('最多支持两位小数!'))
}
}
/**
* 数字,0-100,最多支持4位小数
*/
export function numOfMaxFourDecimal (rule, value, callback) {
if (/^\d+(\.\d{1,4})?$/.test(value)) {
callback()
} else {
callback(new Error('最多支持四位小数!'))
}
}
// 整数校验 [n, m]*/
export function numRange (str, n, m) {
const reg = /^[0-9]\d*$/
return Number(str) >= n && Number(str) <= m && reg.test(str)
}
前端校验
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 引入bootstrap-validator的css文件注意bootstrap-validator是bootstra...
- 教程总目录 上一节:JBolt开发平台入门(19)-AutoSelect组件数据源定义详细使用教程 不管什么项目,...