js 校验(格式:9-99)

求:js校验,只能包含数字和分割符,分隔符(-)可以有一个,且不能以分割符开头和结尾,并且分隔符后的数字要大于分隔符前的数字,数字非零开头
例:9-99、99

阅读 2.1k
2 个回答

不要期望正则是银弹,能解决一切字符串校验判断的事情,你的要求明显不可能完全由正则来处理。
你现在提的验证需求其实还很不明确,比如分隔符到底是什么?分隔符是必须且只有1个还是,可以有1个?
这些不规定清楚,就没有办法细化出实现方法。

此外正则确实不能实现数的比较。所以需要用其它方式来处理。


按新的规则,我提炼一下:

  1. 数字或者数字间隔-
  2. 如有-,则-只能存在于数字间,而不能是开头或者结尾
  3. 数字,包括分隔后的数字不能以0开头
  4. 如有-时,最多只能有1个
  5. 如有-时,分隔前后数字情况为后面的大于前面的

由此,基本的字符串,1-4 可以由正则写出,5只能由其它方式判断。
1-4的判断正则是

/^[1-9]\d*(-[1-9]\d*)?$/

对于5需要用其它方式判断,参考前面的

function valid(str) {
    const m = str.match(/^([1-9]\d*)(-([1-9]\d*))?$/)
    if (!m) return false
    if(str.indexOf('-')>0)  return Number(m[1]) < Number(m[3]) 
    return true
}

直接用正则貌似不能比较数字大小吧
配合js的话还挺简单的

function valid(str) {
    const m = str.match(/^(\d+)-(\d+)$/)
    if (!m) return false
    return Number(m[1]) < Number(m[2])
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题