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

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

我需要做的是在输入字段中检查输入是否包含@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"); } }); 

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

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

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

您可以添加对ES6的 String.prototype.includes支持

 if (!String.prototype.includes) { String.prototype.includes = function (needle, pos) { return this.indexOf(needle, pos || 0) !== -1; }; } "foobar".includes('foo'); // true 

工作前:

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"); }); 

您可以使用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结尾的更多信息- 使用属性选择器或浏览其他属性选择器 。

jsBin演示

 var $warning = $("p.warning"); // PS 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"事件。

PS使用.warning{display:none;}而不是visibility