仅允许遵循完全正则表达式模式的字符

时间:2014-03-19 05:29:52

标签: javascript jquery html regex

我是正则表达式的新手并且有一个问题。我正在验证日期/时间文本输入,只想允许符合精确模式的字符。格式如下:

  

2014年3月19日凌晨2:00

显然,日期(在这种情况下为" 19")和小时(在这种情况下为#34; 2")可能是一个或两个字符长。在Javascript keyup上,我需要一个正则表达式,删除所有不完全符合此模式的字符。我怎么能用正则表达式做到这一点?这是确切的模式:

  • 3个字母字符
  • 然后是空格
  • 然后是1或2个数字
  • 然后是昏迷,然后是另一个空间
  • 然后是一个四位数字
  • 然后另一个空间
  • 然后单词" at"接着是另一个空间
  • 然后是1或2位数字
  • 然后冒号。
  • 然后是2位数字
  • 然后是" am"或" pm"

我不在乎它是一个有效的日期。我只需要输入的文字就可以适应这种格式。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

[A-Za-z]{3}\s\d{1,2},\s\d{4}\sat\s\d{1,2}:\d{2}(am|pm)

将完全符合您的要求

演示:http://regex101.com/r/rU8xT0 \

与js一起使用

var str = "Mar 1, 2014 at 2:00pm";
if( /[A-Za-z]{3}\s\d{1,2},\s\d{4}\sat\s\d{1,2}:\d{2}(am|pm)/.test(str)){
  console.log("pass");
}
else{
  console.log("fail");
}

这正是你想要的,这将检查不正确的值并相应地突出显示,我使用jquery来添加和删除类

$("#text").keyup(function () {
    if (/[A-Za-z]{3}\s\d{1,2},\s\d{4}\sat\s\d{1,2}:\d{2}(am|pm)/.test($(this).val())) {
        $(this).removeClass('error');
        $(this).addClass('good');
    } else {
        $(this).removeClass('good');
        $(this).addClass('error');

    }
})

对于js中的OP特殊要求

var str = "Mar 1, 2014 at 2:00pmaur bahut sara kachra";
var res = str.replace(/([A-Za-z]{3}\s\d{1,2},\s\d{4}\sat\s\d{1,2}:\d{2}(am|pm)).*/, '$1');
console.log(res);

此处提示演示: http://jsfiddle.net/kq65X/1/