天天看點

JavaScript 規則驗證

// 數字、大寫字母或-_/ => 1~20
var idReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z0-9-_/]{1,20}$/
    if (!reg.test(value)) {
      callback(new Error('必須由數字、大寫字母或-_/組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 數字、大寫字母或-_ => 1~20
var idRegNew = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z0-9-_]{1,20}$/
    if (!reg.test(value)) {
      callback(new Error('必須由數字、大寫字母或-_組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 必須有大寫字母組成
var rthReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z]+$/
    if (!reg.test(value)) {
      callback(new Error('必須由大寫字母組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 數字、大寫字母或- => 1~20
var idRegNews = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z0-9-]{1,10}$/
    if (!reg.test(value)) {
      callback(new Error('必須由數字、大寫字母或-組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 大寫字母或- => 1~20
var idRegNewTwe = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z-]{1,20}$/
    if (!reg.test(value)) {
      callback(new Error('必須由大寫字母或-組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 數字、字母 => *
var maxENReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Za-z0-9]*$/
    if (!reg.test(value)) {
      callback(new Error('必須由數字或字母組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 2位大寫字母/數字 => 2
var ndENReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z0-9]{2}$/
    if (!reg.test(value)) {
      callback(new Error('必須由2位大寫字母或數字'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 3位大寫字母/數字 => 3
var rdENReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z0-9]{3}$/
    if (!reg.test(value)) {
      callback(new Error('必須由3位大寫字母或者數字組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 3位大寫字母 => 3
var rdEReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z]{3}$/
    if (!reg.test(value)) {
      callback(new Error('必須由3位大寫字母組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 4位大寫字母 => 4
var rthEReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[A-Z]{4}$/
    if (!reg.test(value)) {
      callback(new Error('必須由4位大寫字母組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 5的倍數的正整數
var fiveMultiple = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^5|([1-9]\d{0,}(0|5))$/
    if (!reg.test(value)) {
      callback(new Error('必須是正整數且是5的倍數組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 數字 => *
var idNumReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[0-9]*$/
    if (!reg.test(value)) {
      callback(new Error('必須由純數字組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 數字 => *
var phoneReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(\d{3}-\d{8}|\d{4}-\d{7,8}|((1[3,5,8][0-9])|(14[1,5,6,7,8])|(16[6,7])|(17[0,1,4,5,6,7,8])|(19[1,7,8,9]))(-)?\d{4}(-)?\d{4})?$/
    if (!reg.test(value)) {
      callback(new Error('該号碼格式或位數有誤'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// ±9999999.99之間 => 1~11
var sevDotTwoDigit = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[0-9]{1,7}(\.([0-9]{1,2}))?$/
    if (!reg.test(value)) {
      callback(new Error('必須在0~9999999.99之間'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// ±99999.99之間
var fiveDotTwoDigit = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^-?[0-9]{1,5}(\.([0-9]{1,2}))?$/
    if (!reg.test(value)) {
      callback(new Error('必須在[-99999.99, 99999.99]之間'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 0~9999999.99之間 => 1~13
var sixDotTwoDigit = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^((\d{1})|([1-9]{1}\d{1,6})){1}(\.\d{1,2})?$/
    if (!reg.test(value)) {
      callback(new Error('必須在[0,9999999.99]之間'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 0~99999.99之間
var fivePositiveDotTwo = (rule, value, callback) => {
  if (value != '' && value != null) {
    if (value == 0) {
      callback(new Error('必須在(0,99999.99]之間'))
    } else {
      const reg = /^((\d{1})|([1-9]{1}\d{1,4})){1}(\.\d{1,2})?$/
      if (!reg.test(value)) {
        callback(new Error('必須在(0,99999.99]之間'))
      } else {
        callback()
      }
    }
  } else {
    callback()
  }
}

// 0~999.99之間
var threeDotTwoDigit = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^((\d{1})|([1-9]{1}\d{1,2})){1}(\.\d{1,2})?$/
    if (!reg.test(value)) {
      callback(new Error('必須在[0,999.99]之間'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 3位正整數 => 0~3
var threeD = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^([1-9]\d{0,2})?$/
    if (!reg.test(value)) {
      callback(new Error('必須由0-3位正整數組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 5位正整數
var fiveD = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^([1-9]\d{0,4})?$/
    if (!reg.test(value)) {
      callback(new Error('必須由0-5位正整數組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 正整數
var mustD = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^\d+$/
    if (!reg.test(value)) {
      callback(new Error('必須由正整數組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 0~360° => 3
var degreePos = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(([0-9]{1})|([1-9]{1}[0-9]{1})|([1-2]{1}[0-9]{2})|([3]{1}[0-5]{1}[0-9]{1})){1}(\.\d{1,4})?$/
    if (!reg.test(value)) {
      callback(new Error('必須在[0°,359.9999°]之間'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 0~360° => 3
var degreePosTwo = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^((([1-9]\d{0,2})|[0])(.\d{1,2})?)?$/
    if (!reg.test(value)) {
      callback(new Error('必須在[0°,360°]之間且最多保留2位小數'))
    } else {
      const val = Number(value)
      if (val < 0 || val > 360) {
        callback(new Error('必須在[0°,360°]之間且最多保留2位小數'))
      } else {
        callback()
      }
    }
  } else {
    callback()
  }
}

// 0~90° => 3
var slopePosTwo = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^((([1-9]\d{0,1})|[0])(.\d{1,2})?)?$/
    if (!reg.test(value)) {
      callback(new Error('必須在[0°,90°]之間且最多保留2位小數'))
    } else {
      const val = Number(value)
      if (val < 0 || val > 90) {
        callback(new Error('必須在[0°,90°]之間且最多保留2位小數'))
      } else {
        callback()
      }
    }
  } else {
    callback()
  }
}

// 位數在6-8位 => 6-8
var passwordReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^.{6,8}$/
    if (!reg.test(value)) {
      callback(new Error('必須輸入6-8位字元'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

var loginPasswordReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(?=.*\d)(?=.*[a-zA-Z])[\da-zA-Z]{8,}$/
    if (!reg.test(value)) {
      callback(new Error('字母加數字,最少不能低于8個字元'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 數字 => 0~6
var sixNum = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[0-9]{0,6}$/
    if (!reg.test(value)) {
      callback(new Error('必須由0-6位純數字組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 數字 => 7位
var sevenNum = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[0-9]{7}$/
    if (!reg.test(value)) {
      callback(new Error('必須由7位純數字組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 數字 => 1~9
var nineNum = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[0-9]{1,9}$/
    if (!reg.test(value)) {
      callback(new Error('必須由1-9位純數字組成'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 整數
var intNum = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^\d+$/
    if (!reg.test(value)) {
      callback(new Error('必須為整數'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 保留兩位小數
var twoDecimal = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/
    if (!reg.test(value)) {
      callback(new Error('必須為正數且最多保留兩位小數'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 保留兩位小數 => ±
var twoDecimalAll = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^-?(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/
    if (!reg.test(value)) {
      callback(new Error('最多保留兩位小數'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

var IPReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(((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))))?$/
    if (!reg.test(value)) {
      callback(new Error('IP位址格式不對'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

var IdCardReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /(^\d{8}(0\d|10|11|12)(0[1-9]|[1-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)(0[1-9]|[1-2]\d|30|31)\d{3}(\d|X|x)$)/
    if (!reg.test(value)) {
      callback(new Error('身份證格式不對'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 正整數
var portReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[+]{0,1}(\d+)$/
    if (!reg.test(value)) {
      callback(new Error('端口号為正整數'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 中文
var chReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[\u4e00-\u9fa5]$/
    if (!reg.test(value)) {
      callback(new Error('必須為中文字元'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 中文
var flightNumReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^[0-9]{3,4}[a-zA-Z]?$/
    if (!reg.test(value)) {
      callback(new Error('必須為3~4位數字加0~1位字母'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 郵箱驗證
var emailReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    // let reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
    // 不能以0字開;@ ;@後必須是數字與字母組成,長度為2-10位;結尾一組,字母長度為2-4位;.字母,最少一組,最多三組
    const reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/
    if (!reg.test(value)) {
      callback(new Error('郵箱格式不正确'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// [0, 1],小數點後六位小數
var percentReg = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(([1]{1}\d*)|(0{1}))(\.\d{1,2})?$/
    if (value > 1) {
      callback(new Error('必須在[0,1]之間且最多保留2位小數'))
    } else {
      if (!reg.test(value)) {
        callback(new Error('必須在[0,1]之間且最多保留2位小數'))
      } else {
        callback()
      }
    }
  } else {
    callback()
  }
}

// 員工密碼
var empPwd = (rule, value, callback) => {
  if (value != '' && value != null) {
    const reg = /^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{8,20}$/
    if (value > 1) {
      callback(new Error('由8-20位數字,英文,字元中的兩種以上組成'))
    } else {
      if (!reg.test(value)) {
        callback(new Error('由8-20位數字,英文,字元中的兩種以上組成'))
      } else {
        callback()
      }
    }
  } else {
    callback()
  }
}

export { fiveMultiple, idReg, empPwd, idRegNew, idRegNews, idRegNewTwe, maxENReg, ndENReg, rdENReg, rdEReg, rthEReg, idNumReg, phoneReg, sevDotTwoDigit, fiveDotTwoDigit, sixDotTwoDigit, fivePositiveDotTwo, threeDotTwoDigit, threeD, fiveD, mustD, degreePos, degreePosTwo, slopePosTwo, passwordReg, loginPasswordReg, sixNum, sevenNum, nineNum, intNum, twoDecimal, twoDecimalAll, IPReg, IdCardReg, portReg, chReg, flightNumReg, emailReg, percentReg, rthReg }
           

繼續閱讀