【问题标题】:javascript regex validate years in rangejavascript正则表达式验证范围内的年份
【发布时间】:2013-07-09 12:01:38
【问题描述】:

我有一年的输入字段,我需要一个正则表达式来验证它。 我有这样的代码:^([12]\d)?(\d\d)$。 但我希望只允许验证特定范围内的年份(例如 1990-2010 年)。我该怎么做?

编辑。范围必须是 1950-2050

【问题讨论】:

  • 不要说for example。正则表达式是关于精确性的。给出你想要完全匹配的东西。这是为了防止出现how to change this regex to match -another- x-y range之类的问题
  • 为什么需要正则表达式?对我来说,这听起来像是一个简单的比较。
  • 您不认为您应该使用下拉菜单来选择年份并根据所需范围从服务器端填充它。
  • 我创建了这个 javascript 库来验证年份范围:github.com/jonschlinkert/is-valid-year。希望有用

标签: javascript regex


【解决方案1】:

试试这个:

1990 - 2010 年:

/^(199\d|200\d|2010)$/

1950 - 2050 年:

/^(19[5-9]\d|20[0-4]\d|2050)$/

其他例子:

1945 - 2013 年:

/^(194[5-9]|19[5-9]\d|200\d|201[0-3])$/

1812 - 3048:

/^(181[2-9]|18[2-9]\d|19\d\d|2\d{3}|30[0-3]\d|304[0-8])$/

基本上,您需要将范围分成简单的“可正则表达式”块:

1812-3048: 1812-1819 + 1820-1899 + 1900-1999 + 2000-2999 + 3000-3039 + 3040-3048
    regex: 181[2-9]    18[2-9]\d   19\d\d      2\d{3}      30[0-3]\d   304[0-8]

【讨论】:

  • 精彩的例子!非常感谢!
  • 您的第一个正则表达式不适用于 OP 的要求。很好的解释!
  • 酷提示!将此逻辑与3widgets.com ? 一起使用
【解决方案2】:

RegExp 在这里似乎不是正确的工具。如果您已经分离出年份值,那么简单的比较肯定会起作用:

if (+yr >= 1990 && +yr <= 2010)

+yr 将字符串转换为数字

【讨论】:

  • 如果 + 转换为数字,则使用 Number() 或 parseInt() 代替。你为其他人编写代码,如果你需要解释它很可能是一个劣质的解决方案。
【解决方案3】:

对于从 1950 到 2050 的范围,您可以使用以下正则表达式:

^19[5-9]\d|20[0-4]\d|2050$

Online demo

【讨论】:

    【解决方案4】:

    正则表达式:

    /^(19[5-9]\d|20[0-4]\d|2050)$/
    

    更简单...

    var year = parseInt(textField.value, 10);
    if( year >= 1950 && year <= 2050 ) {
        ...
    }
    

    【讨论】:

    • 如果你有年份19601970 等,你的 RegEx 会发生什么?
    • 这个正则表达式不起作用,只有 1950-1959 和 2050-2059 匹配。
    【解决方案5】:
    (199[0-9]|200[0-9]|2010)
    

    这将适用于您的“示例案例”。

    有用的网站:http://utilitymill.com/utility/Regex_For_Range

    【讨论】:

      【解决方案6】:

      从 1995 年开始的当年(动态)正则表达式

      var current_year = new Date().getFullYear().toString().split("");
      var reg=new RegExp("^(199[5-9]|200[0-9]|[0-"+current_year[0]+"][0-"+current_year[1]+"][0-"+current_year[2]+"][0-"+current_year[3]+"])$");
      reg.test("1995");
      

      【讨论】:

        【解决方案7】:

        如果您想检查年龄在 18 岁或 70 岁之间,我就是这样做的。 我的解决方案是

        function yearRange(year) {
          let now = new Date().getFullYear();
          let age = now - Number(year);
          if (age < 18 || age > 70) return false;
          return true;
        }
        

        【讨论】:

          【解决方案8】:

          例如,如果您想在电影名称中查找年份,这是一个正则表达式。 年份 b/n 1900 - 2029 和一些符号允许包装年份 .-_+[(

          (?<=(?:\s|\.|_|\-|\+|\(|\[))(?:19[2-9]|20[0-2])\d(?=\s|$|\.|_|\-|\+|\)|\])
          

          在这里查看 https://regex101.com/r/eQ9zK7/82

          注意不能以年份开头,因为前面至少有间隔。 在示例中,前几行是匹配的,因为我们在一行中有多行它们不会匹配。

          1917.2019.1080p... 即使 1917 在范围内,它也只会标记 2019

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-31
            • 1970-01-01
            • 1970-01-01
            • 2016-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多