检查输入字段是否包含特定文本

时间:2014-12-17 23:13:57

标签: javascript jquery

我正在尝试查找用户输入到输入字段的内容是否包含某些文本 - 我有点工作,但只能用于完全匹配而不是部分匹配。如果用户在匹配的文本之前键入任何内容,当然代码不会触发。

我需要做的是检查输入字段中的输入是否包含@nyu.edu

$('.email').keyup(function(){
    if ($(".email").val() == "@nyu.edu") {
        $("p.warning").css("visibility", "visible");
    }
    else if ($(".email").val() != "@nyu.edu") {
        $("p.warning").css("visibility", "hidden");
    }
});

4 个答案:

答案 0 :(得分:4)

通过haystack.indexOf(needle)并检查-1(未找到)来检查字符串是否包含子字符串非常容易。

if ($(".email").val().indexOf("@nyu.edu") !== -1) {
    // contains
} else {
    // does not contain
}

ES6 草案中有一个功能,您可能会发现它更自然,称为includes

您可以像这样添加对 ES6&#39> <{em} String.prototype.includes的支持

if (!String.prototype.includes) {
    String.prototype.includes = function (needle, pos) {
        return this.indexOf(needle, pos || 0) !== -1;
    };
}

"foobar".includes('foo'); // true

答案 1 :(得分:0)

工作前例

http://codepen.io/anon/pen/XJKMjo

$('.email').keyup(function() {
    var exp = /@nyu\.edu$/; // reg ex
    var input = $(this).val(); // email input
    var matches = exp.test(input); // boolean
    // changes to hidden or visible
    $("p.warning").css("visibility", (matches) ? "visible" : "hidden");
});

答案 2 :(得分:0)

您可以使用jQuery基于HTML元素的属性内容进行过滤,以包含,开始或结束您想要的字符串。要使用包含字符串的属性匹配元素,您可以在jQuery选择器中使用[attr*="value"],但我认为您需要结束与字符串匹配的内容。这是如何工作的:

var elements = $(".email[value$='@nyu.edu']");
if(elements.length > 0) {
    // Do something with the elements, such as removing an .error class
} else {
    // Email doesn't end with @nyu.edu
}

详细了解jQuery ends-with attribute selectorbrowse through other attribute selectors

答案 3 :(得分:-1)

<强> jsBin demo

var $warning = $("p.warning"); // P.S. make sure not to target a wrong .warning!
$('.email').on("input", function(){
    $warning.toggle( /@nyu\.edu/ig.test(this.value) );
});

正如我所提到的,.warning作为一个类可以代表任何第一个.warning次出现。使用其他选择器,例如.next().closest(selector).find(".warning")

如果您的客户失去了$$$,您的老板会解雇您,因为您忘记了复制粘贴案例。 ;)开玩笑,使用"input"事件。

P.S使用.warning{display:none;}代替visibility