| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- /**
- * 表单通用验证
- * <pre>
- * 作者:hugh zhuang
- * 邮箱:3378340995@qq.com
- * 日期:2018-07-02-下午3:29:34
- * 版权:广州流辰信息技术有限公司
- * </pre>
- */
- import i18n from '@/utils/i18n'
- import utils from '@/utils/util'
- /**
- * 验证手机号
- * @param {*} phone
- */
- export function validateMobile(phone) {
- const rtn = {
- result: true,
- msg: ''
- }
- let result = true
- let msg = ''
- const isPhone = /^0\d{2,3}-?\d{7,8}$/
- if (utils.isNotEmpty(phone)) {
- if (phone.length === 11) {
- if (isPhone.test(phone)) {
- msg = 'format' // '手机号码格式不正确'
- result = false
- }
- } else {
- msg = 'length'// '手机号码长度不为11位'
- result = false
- }
- } else {
- msg = 'empty'
- result = false
- }
- rtn.result = result
- rtn.msg = msg
- return rtn
- }
- /**
- * 字段验证
- * 首字符为字母,其它只允许为字母、数字或下划线,并且长度不超过18字符"
- * @param {*} value
- * @param {*} callback
- */
- export function testField(rule, value, callback) {
- const res = /^[A-Za-z]{1}([a-zA-Z0-9_]{1,17})$/
- if (!res.test(value) && value.length < 19) {
- callback(new Error('首字符为字母,其它只允许为字母、数字或下划线!'))
- } else if ((!res.test(value) || res.test(value)) && value.length > 19) {
- callback(new Error('长度不超过18字符'))
- } else {
- callback()
- }
- }
- /**
- * 判断校验为空的
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export function validateEmpty(rule, value, callback) {
- const pattern = /\s/
- if (rule.required) {
- callback(new Error(rule.message || i18n.t('validate.required')))
- } else {
- if (pattern.test(value)) {
- callback(new Error('字符请勿携带空格'))
- return
- }
- callback()
- }
- }
- /**
- * 判断校验为必填
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export function validateRequired(rule, value, callback) {
- if (utils.isEmpty(utils.trim(value))) {
- callback(new Error(rule.message || i18n.t('validate.required')))
- return
- }
- callback()
- }
- /**
- * 整数验证
- * @param {*} value
- */
- export function isNumber(value) {
- if (isNaN(value)) {
- return false
- }
- return typeof value === 'number'
- }
- /**
- * 验证整数
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateInteger = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- value = Number(value)
- if (isNumber(value) && parseInt(value, 10) === value && value <= 2147483647) {
- callback()
- } else {
- callback(new Error(rule.message || i18n.t('validate.integer')))
- }
- }
- export const validateFloat = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- const re = /^-?\d*\.\d+$/
- if (!re.test(value) || !isNumber(Number(value))) {
- callback(new Error('填写只能为浮点型'))
- } else {
- callback()
- }
- }
- /**
- * 验证key或者变量
- * 只能为字母开头,允许字母、数字和下划线
- * @param {*} str
- */
- export function testKey(str) {
- const reg = /^[a-zA-Z][a-zA-Z0-9_]*$/
- return reg.test(str)
- }
- /**
- * 验证业务组键key
- * 只能为字母开头,允许字母、数字、下划线和横线
- * @param {*} str
- */
- export function testBizKey(str) {
- const reg = /^[a-zA-Z][a-zA-Z0-9_-]*$/
- return reg.test(str)
- }
- /**
- * 验证类名key
- * 只能为大写字母开头,允许字母、数字
- * @param {*} str
- */
- export function testUpperCaseKey(str) {
- const reg = /^[A-Z][a-zA-Z0-9]*$/
- return reg.test(str)
- }
- /**
- * 验证类名key
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateUpperCaseKey = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- if (!testUpperCaseKey(value)) {
- callback(new Error('规则不合法,只能以大写字母开头,允许字母、数字!'))
- } else {
- callback()
- }
- }
- /**
- * 验证key
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateKey = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- if (!testKey(value)) {
- callback(new Error(rule.message || i18n.t('validate.key')))
- } else {
- callback()
- }
- }
- /* 合法url */
- export function testURL(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)
- }
- /**
- * 验证url
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateURL = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- if (!testURL(value)) {
- callback(new Error(rule.message || i18n.t('validate.url')))
- } else {
- callback()
- }
- }
- /* 小写字母 */
- export function testLowerCase(str) {
- const reg = /^[a-z]+$/
- return reg.test(str)
- }
- /**
- * 验证小写字母
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateLowerCase = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- if (!testLowerCase(value)) {
- callback(new Error(rule.message || i18n.t('validate.lowerCase')))
- } else {
- callback()
- }
- }
- /* 大写字母 */
- export function testUpperCase(str) {
- const reg = /^[A-Z]+$/
- return reg.test(str)
- }
- /**
- * 验证大写字母
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateUpperCase = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- if (!testUpperCase(value)) {
- callback(new Error(rule.message || i18n.t('validate.upperCase')))
- } else {
- callback()
- }
- }
- /* 大小写字母 */
- export function testAlphabets(str) {
- const reg = /^[A-Za-z]+$/
- return reg.test(str)
- }
- /**
- * 验证大小写字母
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validatAlphabets = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- if (!testAlphabets(value)) {
- callback(new Error(rule.message || i18n.t('validate.alphabets')))
- } else {
- callback()
- }
- }
- /**
- * 多少选项
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateOptions = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- const arrayValue = value.split(',') || []
- const item = arrayValue.length
- const min = rule.min
- const max = rule.max
- if (min && !max && item < min) {
- callback(new Error(rule.message || `至少选择 ${min}项`))
- } else if (max && !min && item > max) {
- callback(new Error(rule.message || `最多选择 ${max}项`))
- } else if (min && max && (item < min || item > max)) {
- callback(new Error(rule.message || `选择选项${min}至${max}项`))
- } else {
- callback()
- }
- }
- /**
- * 验证字符长度
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateLengthRange = (rule, value, callback) => {
- const min = typeof rule.min === 'number'
- const max = typeof rule.max === 'number'
- if (utils.isEmpty(value)) {
- callback()
- return
- }
- let val = value
- if (rule.format) {
- val = rule.format(val, rule)
- }
- const length = val.length
- if (min && !max && length < rule.min) {
- callback(new Error(rule.message || `最少填写${rule.min}个字符`))
- } else if (max && !min && length > rule.max) {
- callback(new Error(rule.message || `最多填写${rule.max}个字符`))
- } else if (min && max && (length < rule.min || length > rule.max)) {
- callback(new Error(rule.message || `填写字符个数在 ${rule.min} - ${rule.max}之间`))
- } else {
- callback()
- }
- }
- export const validateNumberRange = (rule, value, callback) => {
- const min = typeof rule.min === 'number'
- const max = typeof rule.max === 'number'
- if (utils.isEmpty(value)) {
- callback()
- return
- }
- if (!utils.isNum(value)) {
- callback(new Error('无效数字'))
- return
- }
- const val = Number(value)
- if (min && !max && val < rule.min) {
- callback(new Error(rule.message || `必须大于或等于${rule.min}`))
- } else if (max && !min && val > rule.max) {
- callback(new Error(rule.message || `必须小于或等于${rule.max}`))
- } else if (min && max && (val < rule.min || val > rule.max)) {
- callback(new Error(rule.message || `必须在 ${rule.min} 到 ${rule.max}之间`))
- } else {
- callback()
- }
- }
- /**
- * 验证小数位
- * @param {*} rule
- * @param {*} value
- * @param {*} callback
- */
- export const validateDecimal = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- const len = (value + '').replace(/^[^.]*[.]*/, '').length
- if (len > rule.decimal) {
- callback(new Error(rule.message || `小数位不能超过${rule.decimal}位`))
- } else {
- callback()
- }
- }
- export const validateDateBetween = (rule, value, callback) => {
- if (utils.isEmpty(value)) {
- return validateEmpty(rule, value, callback)
- }
- callback()
- }
|