如何判断一个字符串在JavaScript中是否包含某个字符?


334

我有一个带有文本框的页面,用户应在其中输入24个字符(字母和数字,不区分大小写)的注册码。我曾经maxlength限制用户输入24个字符。

注册代码通常以破折号分隔的字符组形式给出,但我希望用户输入不带破折号的代码。

如何在没有jQuery的情况下编写我的JavaScript代码,以检查用户输入的给定字符串不包含破折号,或者更好的是,仅包含字母数字字符?


2
在此处找到的答案stackoverflow.com/questions/3192612包含有关如何对字母数字进行验证的信息。
JasCav 2010年

1
要学习正则表达式:regular-expressions.info
Felix Kling,2010年

对于您的jquery伙伴,您应该并且可以使用inArray
JonH 2012年

3
如何格式化输入不是人类的问题。这是计算机的问题。接受用户输入的所有内容,并删除所有不属于非字母字符(非字母),测试结果是否为24个字符长,然后对其进行验证。用户非常讨厌格式化的输入。
tggagne

Answers:


590

在中找到“你好” your_string

if (your_string.indexOf('hello') > -1)
{
  alert("hello found inside your_string");
}

对于字母数字,可以使用正则表达式:

http://www.regular-expressions.info/javascript.html

字母数字正则表达式


那很有帮助。以python程序员的身份讲,我正在用它代替“ in”关键字(我不确定,它可能是非正统的,也可能不是非正统的),但它不仅仅适用于单个字符。
trevorKirkby 2014年

1
我不知道这是如何在答案上投票的。我可以看到很多人通过谷歌搜索来到这里。更好的方法肯定是使用正则表达式。
Spock

25
您将使用正则表达式检查单个字符吗?要获得与内置函数完全相同的功能,这是过多的开销。很多人不了解正则表达式,通常简单的答案是最好的。
kemiller2002

我愿意/hello/g.test(your_string)。虽然indexOf有效,但我认为正则表达式测试可以更好地说明您要完成的工作。如果我试图在字符串中查找字符序列,则索引是不相关的。
Joe Maffei


69

使用ES6 .includes()

"FooBar".includes("oo"); // true

"FooBar".includes("foo"); // false

"FooBar".includes("oo", 2); // false

E:不被IE支持-相反,您可以将Tilde运算符~按位NOT)与.indexOf()一起使用

~"FooBar".indexOf("oo"); // -2 -> true

~"FooBar".indexOf("foo"); // 0 -> false

~"FooBar".indexOf("oo", 2); // 0 -> false

与数字一起使用,Tilde运算符有效 ~N => -(N+1)。将它与双重否定符!!逻辑非)一起使用来转换布尔值:

!!~"FooBar".indexOf("oo"); // true

!!~"FooBar".indexOf("foo"); // false

!!~"FooBar".indexOf("oo", 2); // false

简单,易读,并返回布尔值。非常适合不需要正则表达式的情况。
bryanbraun

1
**请注意,IE不支持include方法**
Bonez024 '18

52

如果变量中包含文本foo

if (! /^[a-zA-Z0-9]+$/.test(foo)) {
    // Validation failed
}

这将测试并确保用户输入了至少一个字符,并且输入字母数字字符。


最好的答案在这里,所有其他答案均不符合我的观点。
chris_r


11

ES6includes在String的中包含内置方法()prototype,可用于检查string是否包含另一个字符串。

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be')); 

以下polyfill可用于在不受支持的浏览器中添加此方法。(来源

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }
    
    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}



6

你们都在想 只需使用一个简单的正则表达式,它就是您最好的朋友。

var string1 = "Hi Stack Overflow. I like to eat pizza."
var string2 = "Damn, I fail."

var regex = /(pizza)/g // Insert whatever phrase or character you want to find

string1.test(regex); // => true
string2.test(regex); // => false

在5分钟内学习正则表达式?


因此,要对此进行实际操作,您只需选择其中的一个即可运行:if ( string1.test(regex) ) { alert("He likes pizza!"); }
Adam McArthur

而您的字母数字测试将是...var regex = /^[a-z0-9]+$/i
Adam McArthur 2014年


它倒退了吗?regex.test(string1)
hlcs

您的示例方法是向后的。应该是regex.test(str)。(str.match(regex)类似,但不返回布尔值。)
jsejcksn

6

如果要在字符串的开头或结尾搜索字符,还可以使用startsWithendsWith

const country = "pakistan";
country.startsWith('p'); // true
country.endsWith('n');  // true

5

var inputString = "this is home";
var findme = "home";

if ( inputString.indexOf(findme) > -1 ) {
    alert( "found it" );
} else {
    alert( "not found" );
}


4

仅测试字母数字字符:

if (/^[0-9A-Za-z]+$/.test(yourString))
{
    //there are only alphanumeric characters
}
else
{
    //it contains other characters
}

正则表达式正在测试字符集0-9,AZ和az中的1个或更多(+),从输入的开头(^)开始到输入的结尾($)停止。


4

凯文斯的回答是正确的,但它需要一个“魔术”数字,如下所示:

var containsChar = s.indexOf(somechar) !== -1;

在这种情况下,您需要知道-1代表未找到。我认为更好的版本是:

var containsChar = s.indexOf(somechar) >= 0;

根据原始当前草案标准,如果未找到字符串,indexOf()则将返回-1。因此,使用0几乎没有什么魔力
所有工人都是必不可少的2016年

3

尝试这个:

if ('Hello, World!'.indexOf('orl') !== -1)
    alert("The string 'Hello World' contains the substring 'orl'!");
else
    alert("The string 'Hello World' does not contain the substring 'orl'!");

这是一个示例:http : //jsfiddle.net/oliverni/cb8xw/


3

字符串的搜索功能也很有用。它在给定字符串中搜索字符以及sub_string。

'apple'.search('pl') 退货 2

'apple'.search('x') 返回 -1


2

例如,如果您要从DOM中读取诸如ap或h1标签之类的数据,则将要使用两个本机JavaScript函数,这很简单,但仅限于es6,至少对于我要提供的解决方案而言。我将搜索DOM中的所有p标签,如果文本包含“ T”,则将删除整个段落。我希望这个小例子可以帮助某人!

的HTML

<p>Text you need to read one</p>
<p>Text you need to read two</p>
<p>Text you need to read three</p>

JS

let paras = document.querySelectorAll('p');

paras.forEach(p => {
  if(p.textContent.includes('T')){
       p.remove();
    } 
});

1

完美的工作。这个例子会很有帮助。

<script>    
    function check()
    {
       var val = frm1.uname.value;
       //alert(val);
       if (val.indexOf("@") > 0)
       {
          alert ("email");
          document.getElementById('isEmail1').value = true;
          //alert( document.getElementById('isEmail1').value);
       }else {
          alert("usernam");
          document.getElementById('isEmail1').value = false;
          //alert( document.getElementById('isEmail1').value);
       }
    }
</script>

<body>
    <h1>My form </h1>
    <form action="v1.0/user/login" method="post" id = "frm1">
        <p>
            UserName : <input type="text" id = "uname" name="username" />
        </p>
        <p>
            Password : <input type="text" name="password" />
        </p>
        <p>
            <input type="hidden" class="email" id = "isEmail1" name = "isEmail"/>
        </p>
        <input type="submit" id = "submit" value="Add User" onclick="return check();"/>
    </form>
</body>

0

演示:include()方法在整个字符串中找到“包含”字符,它将返回true。

var string = "This is a tutsmake.com and this tutorial contains javascript include() method examples."

str.includes("contains");

//The output of this

  true


0

检查字符串是字母数字还是字母数字+一些允许的字符

最快的字母数字方法可能如下所述:Java语言中字母数字检查的最佳方法因为它直接在数字范围内运行。

然后,为了合理地允许其他一些字符,我们可以将它们放在Set快速查找中。

我相信此实现将正确正确地处理代理对

#!/usr/bin/env node

const assert = require('assert');

const char_is_alphanumeric = function(c) {
  let code = c.codePointAt(0);
  return (
    // 0-9
    (code > 47 && code < 58) ||
    // A-Z
    (code > 64 && code < 91) ||
    // a-z
    (code > 96 && code < 123)
  )
}

const is_alphanumeric = function (str) {
  for (let c of str) {
    if (!char_is_alphanumeric(c)) {
      return false;
    }
  }
  return true;
};

// Arbitrarily defined as alphanumeric or '-' or '_'.
const is_almost_alphanumeric = function (str) {
  for (let c of str) {
    if (
      !char_is_alphanumeric(c) &&
      !is_almost_alphanumeric.almost_chars.has(c)
    ) {
      return false;
    }
  }
  return true;
};
is_almost_alphanumeric.almost_chars = new Set(['-', '_']);

assert( is_alphanumeric('aB0'));
assert(!is_alphanumeric('aB0_-'));
assert(!is_alphanumeric('aB0_-*'));
assert(!is_alphanumeric('你好'));

assert( is_almost_alphanumeric('aB0'));
assert( is_almost_alphanumeric('aB0_-'));
assert(!is_almost_alphanumeric('aB0_-*'));
assert(!is_almost_alphanumeric('你好'));

GitHub上游

在Node.js v10.15.1。中测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.