使用正则表达式提取3组2位数

时间:2016-03-28 21:21:13

标签: javascript html regex substring

在javascript中,我有一个包含来自HTML表单的13位ID号的var。此ID号的前6位数字是格式的出生日期:YYMMDD。

输入示例:9409201234987; 其中94是年份,09是月份,20天。

我需要验证这个生日,以便:

  1. 年份介于1920年至1997年(含)之间
  2. 月份在1到12之间
  3. 当天介于1至31之间
  4. 如果其中任何一个都是假的,我的函数需要返回false。

    到目前为止,这是我的功能:

    function validateID(idNum, errors) {
      if (!/^\d{13}$/.test(idNum.value)) {
        errors.innerHTML = "ID Number must be 13 numerical digits";
        return false;
      }
      var year = idNum.value.substring(0, 3);
      var month = idNum.value.substring(3, 5);
      var day = idNum.value.substring(5, 7);
    
      if (year > 97 || year < 20) {
        errors.innerHTML = "Year is outside of range (1920 - 1997)";
        return false;
      } else if (month > 12 || month < 1) {
        errors.innerHTML = "Month is outside of range (1 - 12)";
        return false;
      } else if (day > 31 || day < 1) {
        errors.innerHTML = "Day is outside of range (1 - 31)";
        return false;
      }
    }

    参数:idNum是HTML表单输入,类型为text。错误是我的HTML中的一个div,用于输出错误。

    子串显然不适合我,有人可以建议一个不同的方法,最好使用正则表达式。谢谢!

1 个答案:

答案 0 :(得分:3)

您的子字符串参数错误。结束参数是从0开始的,而不是从1开始的。此外,您应该使用parseInt()将字符串转换为数字。

var year = parseInt(idNum.value.substring(0, 2), 10);
var month = parseInt(idNum.value.substring(2, 4), 10);
var day = parseInt(idNum.value.substring(4, 6), 10);

您还可以在进行正则表达式匹配时提取它们。

if (!(match = /^(\d{2})(\d{2})(\d{2})\d{7}$/.test(idNum.value)) {
    errors.innerHTML = "ID Number must be 13 numerical digits";
    return false;
}
var year = parseInt(match[1], 10);
var month = parseInt(match[2], 10);
var day = parseInt(match[3], 10);