javascript - 验证按键上的日期不起作用

标签 javascript jquery regex

这是正则表达式:

 pattern =/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/;

大家好,我发现了一个简单的日期格式正则表达式,没有检查闰年,但在我的 fiddle 上我仍然可以输入其他无效字符。 请看我的FIDDLE .

最佳答案

http://jsbin.com/ruhaxo/9/edit

你的代码让我有点不舒服,所以我试着写得更简单,这样更容易阅读,你可以拉出你需要的部分,我真的认为这只是 event.preventDefault()当有比赛时。只是为了扩展:http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes 您正在寻找字符代码而不是文字数字。

    $('input').on('keypress', function (e) {
      var leng = $(this).val().length;

      if (window.event) {
        code = e.keyCode;
      }else {
        code = e.which;
      };

      var allowedCharacters = [49,50,51,52,53,54,55,56,57,48,45];
      var isValidInput = false;

      for (var i = allowedCharacters.length - 1; i >= 0; i--) {
        if(allowedCharacters[i] == code){
          isValidInput = true;
        } 
      };

      if(isValidInput === false || /* Can only input 1,2,3,4,5,6,7,8,9 or - */
       (code == 45 && (leng < 2 || leng > 5 || leng == 3 || leng == 4)) ||
       ((leng == 2 || leng == 5) && code !== 45) || /* only can hit a - for 3rd pos. */
        leng == 10 ) /* only want 10 characters "12-45-7890" */
      {

        event.preventDefault();
        return;
      }

    });

您还可以使用对象而不是数组来执行此操作。这更容易阅读:

    $('input').on('keypress', function (e) {
      var leng = $(this).val().length;

      if (window.event) {
        code = e.keyCode;
      }else {
        code = e.which;
      };

      var allowedCharacters = {49:1,50:2,51:3,52:4,53:5,54:6,55:7,56:8,57:9,48:0,45:'-'}; /* KeyCodes for 1,2,3,4,5,6,7,8,9,- */

      if(typeof allowedCharacters[code] === 'undefined'|| /* Can only input 1,2,3,4,5,6,7,8,9 or - */
         (code == 45 && (leng < 2 || leng > 5 || leng == 3 || leng == 4)) ||
         ((leng == 2 || leng == 5) && code !== 45) || /* only can hit a - for 3rd pos. */
          leng == 10 ) /* only want 10 characters "12-45-7890" */
      {

        event.preventDefault();
        return;
      }

    });

编辑:

请小心这一点,我还没有完全测试过这一点,但我编辑了提到的帖子中的正则表达式,如果除了上面的其他选择之一之外还有这个,(这发生在其他检查后的 keyup 上)已完成)这将验证格式为 mm-dd-yyyy 的日期,请检查它是否正常工作,我尝试了 02-29-2008,我能想到的第一个闰年,并且它有效,但我建议测试自从修改后就更多了。

$('input').on('keyup',function(e){

  /* From:
  http://stackoverflow.com/questions/17503043/javascript-regular-expression-to-validate-date-in-mm-dd-yyyy-format
  and
  http://jsfiddle.net/LSsMc/
  */

  var thisVal = $(this).val();
  var leng = thisVal.length;

  var reg = new RegExp(/^(((0[13578]|1[02])\-(0[1-9]|[12]\d|3[01])\-((19|[2-9]\d)\d{2}))|((0[13456789]|1[012])\-(0[1-9]|[12]\d|30)\-((19|[2-9]\d)\d{2}))|(02\-(0[1-9]|1\d|2[0-8])\-((19|[2-9]\d)\d{2}))|(02\-29\-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g);
  if(leng == 10){
    if(reg.test(thisVal)){
      console.log('Valid Date');
    }else {
      event.preventDefault();
      return;
    } 
  }
});

关于javascript - 验证按键上的日期不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539571/

相关文章:

java - 从逗号分隔的字符串中读取=之后的值

ruby 正则表达式 : replace non-word chars that are not space chars

r - 隔离文本中的特定数值

javascript - 如何在javascript中以模态隐藏表单

asp.net - $.ajax 调用返回 application/json 并在测试服务器上运行,text/html 在生产服务器上运行并失败

javascript - Fancybox 强制滚动到顶部

javascript - React Native 组件中的 onEnter/onExit 方法 (react-native-router-flux)

javascript - javascript 如何知道 Rails 3 中当前的语言环境?

javascript - Bootstrap 折叠表行

javascript - 如何构建简单的富文本框?