JavaScriptで文字列に特定の文字が含まれているかどうかを確認するにはどうすればよいですか?


335

ユーザーが24文字(文字と数字、大文字と小文字は区別されません)の登録コードを入力することになっているテキストボックスのあるページがあります。以前maxlengthは、ユーザーが24文字を入力するのを制限していました。

登録コードは通常、ダッシュで区切られた文字のグループとして与えられますが、ユーザーがダッシュなしでコードを入力できるようにしたいと思います。

jQueryを使用せずにJavaScriptコードを記述して、ユーザーが入力した特定の文字列にダッシュが含まれていないか、または英数字のみが含まれていることを確認するにはどうすればよいですか?


2
ここにある答えは、stackoverflow.com / questions / 3192612に、英数字で検証する方法に関する情報があります。
JasCav

1
正規表現を学ぶには:regular-expressions.info
Felix Kling

あなたはjqueryの人々のためにあなたが使うべきであり、使うことができますinArray
JonH

3
入力のフォーマット方法は人間の問題ではありません。それはコンピュータの問題です。ユーザーが入力したものをすべて取り、属していないすべての文字(非アルファ)を​​削除し、結果が24文字であることをテストして確認します。ユーザーは本当にフォーマットされた入力が嫌いです。
tggagne 2013年

回答:


592

「こんにちは」を見つけるには 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
これが回答でどのように投票されたのかわかりません。グーグルでたくさんの人が来ているのがわかります。より良い方法は、間違いなく正規表現を使用することです。
2015年

25
正規表現を使用して単一の文字をチェックしますか?これは、組み込み関数が実行するのとまったく同じことを行うための過度のオーバーヘッドです。正規表現を理解していない人はたくさんいますが、一般的にはより単純な答えが最善です。
kemiller2002、2015年

私は一緒に行き/hello/g.test(your_string)ます。indexOfは機能しますが、正規表現テストは、あなたが達成しようとしていることをよりよく物語っていると思います。文字列内の文字のシーケンスを見つけようとしている場合、インデックスは無関係です。
ジョー・マフェイ


69

ES6 .includes()

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

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

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

E:IEではサポートされていません-代わりに、.indexOf()でティルデ演算子~ビットごとのNOT)を使用できます

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

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

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

数値とともに使用すると、ティルデ演算子は効果的 ~N => -(N+1)です。ブール値を数値に変換するには、二重否定!!論理否定)を使用します。

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

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

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

シンプルで読みやすく、ブール値を返します。正規表現が必要ない場合に最適です。
ブライアンブラウン2017

1
**
include

52

変数にテキストがある場合foo

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

これにより、ユーザーが少なくとも1文字を入力し英数字のみを入力したことをテストして確認します。


ここでの最良の答えは、他のすべての答えは私のハメ撮りからヌルです。
chris_r


11

ES6にincludesStringの組み込みメソッド()がprototype含まれています。これを使用して、文字列に別の文字列が含まれているかどうかを確認できます。

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

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

次のポリフィルを使用して、サポートされていないブラウザでこのメソッドを追加できます。(出典

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


7

これを行うには、正規表現を使用します。

function isAlphanumeric( str ) {
 return /^[0-9a-zA-Z]+$/.test(str);
}

これは正確に1桁をチェックし、OPが望むようにすべての英数字を受け入れるわけではありません。
cdhowie 2010

@cdhowie .. +を忘れましたが、質問も読み間違えました。指摘してくれてありがとう。
ガブリエレペトリオーリ

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!"); }
アダム・マッカーサー

そして、あなたの英数字テストは...var regex = /^[a-z0-9]+$/i
アダムマッカーサー


後ろ向き?regex.test(string1)
hlcs 2017年

メソッドの例は逆です。それはあるはずですregex.test(str)。(str.match(regex)似ていますが、ブール値を返しません。)
jsejcksn

6

文字列の最初または最後の文字を検索する場合はstartsWith、およびendsWith

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;

その場合、-1not foundを表すことを知っておく必要があります。私は少し良いバージョンになると思います:

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

元の現在の、およびドラフト標準によれば、文字列が見つからない場合は-1indexOf()が返されます。したがって、0を使用するよりも魔法のようなものはほとんどありません。
すべての労働者は必須である


3

文字列の検索機能も便利です。指定された文字列内の文字とsub_stringを検索します。

'apple'.search('pl') 戻り値 2

'apple'.search('x') 帰る -1


2

たとえば、apまたはh1タグなどのDOMからデータを読み取る場合、2つのネイティブ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

文字列が英数字または英数字+許可されている文字かどうかを確認します

数字の範囲を直接操作するため、Javascriptで英数字をチェックする最善の方法は、次の場所にあるように、最も高速な英数字の方法です。

次に、他のいくつかの余分な文字を適切に許可するために、それらを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でテスト済み。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.