//金额转换保留小数后两位
const transform = (v)=>{
let num = v
num += ''
num = num.replace(/[^0-9|\.]/g, '') //清除字符串中的非数字非.字符
if(/^0+/) //清除字符串开头的0
num = num.replace(/^0+/, '')
if(!/\./.test(num)) //为整数字符串在末尾添加.00
num += '.00199999999'
if(/^\./.test(num)) //字符以.开头时,在开头添加0
num = '0' + num
num += '00999999' //在字符串末尾补零
num = num.match(/\d+\.\d{2}/)[0]
if(v == null) num = ''
return num
}
输入手机号只能输入整数
<!-- 输入手机号只能输入整数 -->
<el-input
maxlength='11'
v-model="form.waybillNoNum"
placeholder="请输入手机号"
clearable class="formInput"
onkeyup="value=value.replace(/[^\w\.\/]/ig,'')">
</el-input>
URL 必须以 "http://"、 "https://" 等有效协议开头
//URL 必须以 "http://"、 "https://" 等有效协议开头
export const urlCheck = (rule, value, cb) => {
if (!value) { cb() }
if (!/^(https?|ftp|file)?:\/\//.test(value)) {
cb(new Error('地址不正确:URL 必须以 "http://"、 "https://" 等有效协议开头'))
} else if (!/^(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]$/.test(value)) {
const illegalChar = value.match(/(https?|ftp|file):\/\/.*([^-A-Za-z0-9+&@#/%?=~_|!:,.;])/)
if (illegalChar) {
cb(new Error(`地址不正确:"${illegalChar[2]}" 是不合法的 URL 字符`))
return
}
const illegalTail = value.match(/[^-A-Za-z0-9+&@#/%=~_|]$/)
if (illegalTail && illegalTail[0]) {
cb(new Error(`地址不正确:"${illegalTail[0]}" 不能作为 URL 的结尾`))
return
}
cb(new Error('地址不正确:不合法的地址格式,请检查'))
} else {
cb()
}
}
export const urlCheckCN = (rule, value, cb) => {
if (!value) { cb() }
if (!/^(https?|ftp|file)?:\/\//.test(value)) {
cb(new Error('地址不正确:URL 必须以 "http://"、 "https://" 等有效协议开头'))
} else if (!/^(https?|ftp|file):\/\/[-A-Za-z0-9_\u4e00-\u9fa5_+&@#/%?=~_|!:,.;]+[-A-Za-z0-9_\u4e00-\u9fa5_+&@#/%=~_|]$/.test(value)) {
const illegalChar = value.match(/(https?|ftp|file):\/\/.*([^-A-Za-z0-9_\u4e00-\u9fa5_+&@#/%?=~_|!:,.;])/)
if (illegalChar) {
cb(new Error(`地址不正确:"${illegalChar[2]}" 是不合法的 URL 字符`))
return
}
const illegalTail = value.match(/[^-A-Za-z0-9+&@#/%=~_|]$/)
if (illegalTail && illegalTail[0]) {
cb(new Error(`地址不正确:"${illegalTail[0]}" 不能作为 URL 的结尾`))
return
}
cb(new Error('地址不正确:不合法的地址格式,请检查'))
} else {
cb()
}
}
只能为字母和数字
export const patterns = {
email: /^([\w-_]+(?:\.[\w-_]+)*)@((?:[a-z0-9]+(?:-[a-zA-Z0-9]+)*)+\.[a-z]{2,6})$/i,
alphabetNumeric: /^[0-9a-zA-Z]*$/,
}
export const alphabetNumericCheck = (rule, value, cb) => {
if (patterns.alphabetNumeric.test(value)) {
cb()
return
}
cb(new Error('只能为字母和数字'))
}
JSON 格式不合法
export const JSONStringCheck = (rule, value, cb) => {
try {
if(value!==''){
JSON.stringify(JSON.parse(value))
}
cb()
} catch (e) {
cb(new Error('JSON 格式不合法'))
}
}
长度超过限制
export const PhysicalLengthCheckFactory = length => ((rule, value, cb) => {
const len = typeof length === 'function' ? length() : length
if (physicalLength(value) > len * 2) return cb(new Error(`长度超过限制: 最多 ${len} 个汉字, 或者 ${len * 2} 个字母`))
return cb()
})
其他一些
export const NumberRangeFactory = ({ min, max, type = 'float' }) => (rule, value, cb) => {
if (rule.required === false && value === null) return cb()
if (Number.isNaN(value)) return cb(new Error('数字不合法'))
value = Number(value)
if (type === 'interger' && Number.isInteger(value)) return cb(new Error('只能输入整数'))
if (value < min || value > max) return cb(new Error(`只能输入 ${min} - ${max} 之间的数字`))
return cb()
}
export const ThemeColor = ((rule, value, cb) => {
if (/^#[0-9a-fA-F]{6}$/.test(value)) return cb()
return cb('不合法的颜色值')
})
export const CheckNotZero = () => (rule, value, cb) => {
if (value <= 0) return cb(new Error('请输入大于 0 的正整数'))
return cb()
}
export const NumberValidator = () => (rule, value, cb) => {
if (isNaN(value)) return cb(new Error('请输入数字'))
return cb()
}
export const MultipleValidator = (targetValue) => (rule, value, cb) => {
if (isNaN(value)) return cb(new Error('请输入数字'))
if ((value/targetValue)%1 !== 0) cb(new Error(`请输入${targetValue}的倍数`))
return cb()
}
export const MultipleValidatorExtend = () => (rule, value, cb) => {
if (isNaN(value)) return cb(new Error('请输入数字'))
// if ((value/targetValue)%1 !== 0) cb(new Error(`请输入${targetValue}的倍数`))
return cb()
}