如何将此精确短语与正则表达式匹配?

时间:2012-12-15 23:05:36

标签: javascript regex

See it in action!

HTML:

<input type='text' value="2012-12-30 Morning">
<input type='text' value="2012-12-30 Lunch">
<input type='text' value="2012-12-30 Dinner">
<input type='text' value="2012-12-30 Either akgalkgalkgla">
<input type='text' value="2012-12-30">
<input type='text' value="Morning">
<button>Check</button>

的Javascript / jQuery的:

$("button").click(function() {
    $("input")
        .filter(function() {
            return this.value.match(/[0-9]{4}-[0-9]{2}-[0-9]{2}\s[A-Za-z]+/);
        })
        .css("border", '1px solid red');

})​

我尝试使用锚点^$,但它不再匹配了。在上面的例子中,它不应该匹配“2012-12-30 Aither akgalkgalkgla”

这是正则表达式 [0-9]{4}-[0-9]{2}-[0-9]{2}\s[A-Za-z]+

2012-12-30 Morning
2012-12-30 Lunch
2012-12-30 Dinner
2012-12-30 Either akgalkgalkgla

更新

所以^[0-9]{4}-[0-9]{2}-[0-9]{2}\s[A-Za-z]+$确实有效。我最初在regexpal上尝试这个,它似乎没有用......

2 个答案:

答案 0 :(得分:0)

添加锚点似乎可以很好地防止部分匹配。前三个输入的内容是匹配的,后三个不是:

$("button").click(function() {
    $("input")
        .filter(function() {
            return this.value.match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}\s[A-Za-z]+$/);
        })
        .css("border", '1px solid red');
});

这里有效:http://jsfiddle.net/ZZYMG/4/

如果要将边框应用于失败此测试的所有元素,只需反转在过滤器回调中返回的布尔值:

return !this.value.match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}\s[A-Za-z]+$/);

答案 1 :(得分:0)

使用锚点按预期工作。你确定你在正确的地方有锚吗?

/^[0-9]{4}-[0-9]{2}-[0-9]{2}\s[A-Za-z]+$/