web前端技术分享

常用 js 正则表达式

2024-10-29  本文已影响0人  阿巳交不起水电费

后续中有遇到其他常用的js正则会持续更新~~~

获取带有单位字符串前的数字

let fn = (val='')=>{
    return (val.match(/\d+(\.)?\d+/) || [])[0]
}
fn('50.22MB') // '50.22'
fn('50px') // '50'
fn('abc123.45abc') // '123.45'

// tip:parseInt() 或 parseFloat() 函数也可以达到相同效果(注意不是数字开头的字符串将得到 NaN)
parseFloat('50.33px') // 50.33
parseInt('50.33px') // 50
parseFloat('abc123.45abc') // NaN

验证是否是身份证号码

  /**
   *  验证是否是身份证号码
   * @param card 身份证号码
   * @return {boolean} true: 是 false:否
   */
  function isCardNo(card) {
    if(!card) return false
    // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
    let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    return reg.test(card)
  }

tip: 根据身份证号码解析出生年月

    /**
     * 根据身份证号码解析出生年月
     * @param idCard 身份证号码
     * @param format 返回类型 yyyy-MM-dd
     * @return {string|null}
     */
    function getBirthDateByIDNo(idCard, format="yyyy-MM-dd") {
      if(!isCardNo(idCard)) return null
      let pattern = /^(\d{6})(\d{4})(\d{2})(\d{2})/;
      let match = pattern.exec(idCard);
      if (match) {
        let year = match[2];
        let month = match[3];
        let day = match[4];
        // 解析 format
        let formatReg = format.replace('yyyy','$1').replace('MM','$2').replace('dd','$3')
        // return `${year}${month}${day}`.replace(/^(\d{4})(\d{2})(\d{2})$/, '$1-$2-$3')
        return `${year}${month}${day}`.replace(/^(\d{4})(\d{2})(\d{2})$/, formatReg)
      }
      return null;
    }

验证是否是邮箱

function isEmail(val) {
    let reg = /^([0-9A-Za-z\-_.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g
    // ^(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w{2,3}){1,3})$"
    return reg.test(val)
  }

验证是否是手机号码

function isPhone(val){
    return /^1[3|4|5|7|8|9]\d{9}$/.test(val)
}

若对你有帮助,请点个赞吧,若能打赏不胜感激,谢谢支持!
本文地址:https://www.jianshu.com/p/bd22414e65b7?v=1730252342016,转载请注明出处,谢谢。

上一篇 下一篇

猜你喜欢

热点阅读