二、常用的正则校验表达式

14 篇文章 0 订阅

常用正则表达式(正则

if(!/^$|^[1-9]\d*$/.test(this.formData.monthQuota)){
    this.$message.warning('每月配额只支持输入正数')
    return
}


/^$|^[1-9]\d*$/      只支持整数和空
1、正则校验:校验用户名(支持中文、英文大小写、数字与下划线、中横线、长度在4-30)

var reg = new RegExp("^[_\u4e00-\u9fa5_a-zA-Z0-9]{4,30}$");
console.log(reg.test("正则稍_等待A123正则稍_等待A123正则稍_等待A12"));
2、校验邮箱地址
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
console.log(reg.test("111111111@qq.com"));
3、正则校验:匹配中文

var reg = new RegExp("^[\u4e00-\u9fa5]$");
console.log(reg.test("正则稍_等待A123正则稍_等待A123正则稍_等待A12"));
4、校验经纬度:(要求-+出现0或1次;0-9之间数字出现1-3个;一个小数点;0-9之间数字出现6-10个)

var reg = new RegExp("^[-]?\d{1,3}\.\d{6,10}$");
console.log(reg.test("0.1234567"));
const rules = {
  // 数字
  num: {
    ex: /^(([0-9]*[1-9][0-9]*)|(0+))$/,
    msg: '请输入数字'
  },

  // 验证英文
  english: {
    ex: /^.[A-Za-z]+$/,
    msg: '请输入英文字符'
  },

  // 电话(座机)
  tel: {
    ex: /^\d{3}-\d{7,8}|\d{4}-\d{7,8}$/,
    msg: '请输入正确的座机号'
  },

  // 联系电话
  phone: {
    ex: /^((\(\d{2,3}\))|(\d{3}[\-]{0,1}))?(\(0\d{2,3}\)|0\d{2,3}[\-]{0,1})?[1-9]\d{6,7}([\-]{0,1}\d{1,4})?$/,
    msg: '请输入正确的联系电话'
  },

  // 手机号码
  mobile: {
    ex: /^1[0-9]{10}$/,
    msg: '请输入正确的手机号'
  },

  // 邮箱(email)
  email: {
    ex: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
    msg: '请输入正确的email地址'
  },

  //或者如下:

  email: {
    ex: /^(([^<>()\\[\]\\.,;:\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,}))$/,
    msg: '请输入正确的email地址'
  },


  // ip
  ip: {
    ex: /^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))$/,
    msg: '请输入正确的ip地址'
  },

  /**
 * URL地址
 * @param {*} s
 */
 http1:{
     msg: /^http[s]?:\/\/.*/.test(s)
 }
//或者如下:

 http2:{
     msg: /^(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.,?'\\+&%$#=~_-]+))*$/
 }

  // URL地址, 仅支持http和https开头的
  url: {
    ex: /^(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?$/,
    msg: '请输入以http和https开头的网址'
  },

  // 昵称
  nickname: {
    ex: /^[\u4E00-\u9FA5\uF900-\uFA2D\w]{2,40}$/i,
    msg: '昵称格式错误'
  },

  // 用户名
  username: {
    ex: /^[\w]{2,32}$/i,
    msg: '用户名格式错误'
  },

  // 密码
  password: {
    ex: /^[\w\.;,'~!#@$%^&*()<>\-=:\?+|]+$/,
    msg: '密码格式错误'
  },

  // 汉字
  chinese: {
    ex: /^[\u4E00-\u9FA5\uF900-\uFA2D\w]{2,40}$/i,
    msg: '请输入汉字'
  },

  // 银行卡号码
  bankCard: {
    ex: /^[1-9]\d{9,19}$/,
    msg: '请输入正确的银行卡号码'
  },

  // 证件号码
  IDNumber: {
    ex: /^[a-z0-9A-Z]{0,50}$/,
    msg: '请输入正确的证件号码'
  },

  // 身份证号码,包括15位和18位的
  IDCard: {
    ex: /(^[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}[0-9Xx]$)|(^[1-9]\d{7}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)/,
    msg: '请输入正确的身份证号码'
  },


/**
 * 判断身份证号码
 */
const cardid = (code) => {
  let list = []
  let result = true
  let msg = ''
  var 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 (!validatenull(code)) {
    if (code.length == 18) {
      if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
        msg = '证件号码格式错误'
      } else if (!city[code.substr(0, 2)]) {
        msg = '地址编码错误'
      } else {
        // 18位身份证需要验证最后一位校验位
        code = code.split('')
        // ∑(ai×Wi)(mod 11)
        // 加权因子
        var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        // 校验位
        var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x']
        var sum = 0
        var ai = 0
        var wi = 0
        for (var i = 0; i < 17; i++) {
          ai = code[i]
          wi = factor[i]
          sum += ai * wi
        }
        if (parity[sum % 11] != code[17]) {
          msg = '证件号码校验位错误'
        } else {
          result = false
        }
      }
    } else {
      msg = '证件号码长度不为18位'
    }
  } else {
    msg = '证件号码不能为空'
  }
  list.push(result)
  list.push(msg)
  return list
}


  // QQ号码
  qq: {
    ex: /^[1-9]\d{4,11}$/,
    msg: '请输入正确的QQ号码'
  },


  // 0到20位的英文字符和数字
  enNum0to20: {
    ex: /^[a-z0-9A-Z]{0,20}$/,
    msg: '请输入20位以内的英文字符和数字'
  },

  // 2到100位的中英文字符和空格
  cnEnSpace2to100: {
    ex: /^[a-zA-Z\u4E00-\u9FA5\s*]{2,100}$/,
    msg: '请输入2到100位的中英文字符和空格'
  },

  // 数字和换行符
  numLinefeed: {
    ex: /^[0-9\n*]+$/,
    msg: '请输入数字和换行符'
  },

  // 银行卡号码
  char0to255: {
    ex: /^.{0,255}$/,
    msg: '请输入255位以内的字符'
  },

  // 银行卡号码
  bankCard: {
    ex: /^[1-9]\d{9,19}$/,
    msg: '请输入正确的银行卡号码'
  },

  // 银行卡号码
  bankCard: {
    ex: /^[1-9]\d{9,19}$/,
    msg: '请输入正确的银行卡号码'
  }
}

/**
 * 排序值验证,排序值不可以大于255
 */
const validateOrder = (rule, value, callback) => {
  if (parseInt(value) > 255) {
    return callback(new Error('排序值不可以大于255'))
  } else {
    callback()
  }
}

/**
 * 整数范围验证
 */
const validateIntRange = (rule, value, callback) => {
  if (parseInt(value, 10) != value || parseInt(value, 10) + '' != value) {
    return callback(new Error('请输入整数'))
  }
  if (parseInt(value, 10) < rule.rmin) {
    return callback(new Error('数值不能小于' + rule.rmin))
  }
  if (parseInt(value, 10) > rule.rmax) {
    return callback(new Error('数值不能大于' + rule.rmax))
  }
  callback()
}

/**
 * 浮点数范围验证
 */
const validateFloatRange = (rule, value, callback) => {
  if (parseFloat(value, 10) != value) {
    return callback(new Error('请输入数值'))
  }
  if (parseFloat(value, 10) < rule.rmin) {
    return callback(new Error('数值不能小于' + rule.rmin))
  }
  if (parseFloat(value, 10) > rule.rmax) {
    return callback(new Error('数值不能大于' + rule.rmax))
  }
  callback()
}


/**
 * 验证多行文本是否格式正确
 * @param {*} opt{msgNull, msgError, rule, ruleFun}
 * @param {*} value
 * @param {*} callback
 * @returns
 */
const validateMultiline = (rule, value, callback) => {
  //console.log(rule)
  if (value == null || value.length == 0) {
    return callback(
      new Error(rule && rule.message ? rule.message : '请输入内容')
    )
  }
  let arr = value.split(`\n`)

  for (let k in arr) {
    let line = arr[k]
    if (rule && rule.ruleFun && !rule.ruleFun(line)) {
      return callback(new Error(rule.message ? rule.message : '格式输入错误'))
    } else if (rule && rule.pattern && !rule.pattern.test(line)) {
      return callback(new Error(rule.message ? rule.message : '格式输入错误'))
    }
  }

  callback()
}

/* 验证pad还是pc */
const vaildatePc = ()=> {
  const userAgentInfo = navigator.userAgent
  const Agents = [
    'Android',
    'iPhone',
    'SymbianOS',
    'Windows Phone',
    'iPad',
    'iPod'
  ]
  let flag = true
  for (var v = 0; v < Agents.length; v++) {
    if (userAgentInfo.indexOf(Agents[v]) > 0) {
      flag = false
      break
    }
  }
  return flag
}



const validateTextList = opt => {
  return {
    validate(rule, value, callback) {
      console.log(rule)
       if (value == null || value.length == 0) {
         return callback(new Error(opt && opt.msgNull ? opt.msgNull : '请输入内容'))}
         let arr = value.split(`\n`)

       for (let k in arr) {
         let line = arr[k]
         if (opt.ruleFun && !opt.ruleFun(line)) {
           return callback(new Error(opt && opt.msgError ? opt.msgError : '格式输入错误'))
         } else if (opt.rule && !opt.rule.test(line)) {
           return callback(
             new Error(opt && opt.msgError ? opt.msgError : '格式输入错误')
           )
         }
       }

       callback()
     }
   }
 }


// 测试validateTextList方法
 console.log(
   validateTextList({ rule: rules.mobile.ex }).validate(
     1,
     `13811711701\n13811711701`,
     function(v) {
       console.log(v)
     }
   )
 )

/*
	value-format="yyyy-MM-dd" //2018-12-27
	value-format="yyyy-MM-dd HH:mm:ss" //2018-12-27 00:00:00
	value-format="timestamp" // 1483326245000
*/


const DateTool = {
  //日期格式
  dateFormats: {
    Y: 'yyyy',
    M: 'yyyy-MM',
    D: 'yyyy-MM-dd'
  },

  //日期map
  dateTypeMap: {
    Y: 'year',
    M: 'month',
    D: 'date'
  },

  //日期范围map
  dateTypeRangeMap: {
    Y: 'yearrange',
    M: 'monthrange',
    D: 'daterange'
  },

  //日期列表:年、月、日
  dateTypeList_ymd: [
    {
      name: '年',
      id: 'Y'
    },
    {
      name: '月',
      id: 'M'
    },
    {
      name: '日',
      id: 'D'
    }
  ],

  //日期列表:年、月
  dateTypeList_ym: [
    {
      name: '年',
      id: 'Y'
    },
    {
      name: '月',
      id: 'M'
    }
  ],

  //日期列表:月、日
  dateTypeList_md: [
    {
      name: '月',
      id: 'month'
    },
    {
      name: '日',
      id: 'date'
    }
  ],

  //设置选择今天以及今天之后的日期
  limitGeNow: {
    disabledDate(time) {
      return time.getTime() < Date.now() - 8.64e7
    }
  },

  //设置选择今天以及今天以前的日期
  limitLeNow: {
    disabledDate(time) {
      return time.getTime() > Date.now() - 8.64e6
    }
  },

  // 设置选择今天之后的日期(不能选择当天时间)
  limitGtNow: {
    disabledDate(time) {
      return time.getTime() < Date.now()
    }
  },

  //设置选择今天之前的日期(不能选择当天)
  limitLtNow: {
    disabledDate(time) {
      return time.getTime() > Date.now()
    }
  },

  // 设置选择三个月之前到今天的日期
  limitLeNowFor3month: {
    disabledDate(time) {
      let curDate = new Date().getTime()
      let three = 90 * 24 * 3600 * 1000
      let threeMonths = curDate - three
      return time.getTime() > Date.now() || time.getTime() < threeMonths
    }
  },

  // 限制结束日期不能大于开始日期, limitBegin/limitEnd,针对选择范围(type="daterange")的日期筛选
  limitBegin: {
    disabledDate: time => {
      if (this.value2 != '') {
        return time.getTime() > Date.now() || time.getTime() > this.value2
      } else {
        return time.getTime() > Date.now()
      }
    }
  },

  limitEnd: {
    disabledDate: time => {
      return time.getTime() < this.value1 || time.getTime() > Date.now()
    }
  }
}

const Validator = {
  rules,
  validateOrder,
  validateIntRange,
  validateFloatRange,
  validateMultiline,
  DateTool
}

export default {
  install: function(Vue, Option) {
    Object.defineProperty(Vue.prototype, '$valid', { value: Validator })
  }
}
对于上述封装在具体组件页面中的使用方法:
 <el-form-item label="ip地址限制:"prop="ipLimit"
:rules="[
  {
    required: true,
    ruleFun: val => {return val > 0 ? true : false},
    pattern: $valid.rules.ip.ex,//校验规则
    validator: $valid.validateTextList,
    message: '请输入ip地址限制',
    trigger: 'blur'
  }
]"
> 

常用正则校验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值