文字列に空白があるかどうかを確認する


95

文字列に空白があるかどうか確認しようとしています。私はこの機能を見つけましたが、機能していないようです:

function hasWhiteSpace(s) 
{
    var reWhiteSpace = new RegExp("/^\s+$/");

    // Check for white space
    if (reWhiteSpace.test(s)) {
        //alert("Please Check Your Fields For Spaces");
        return false;
    }

    return true;
}

ちなみに、に引用符を追加しましたRegExp

何か問題がありますか?私が使えるものは他にありますか?うまくいけばjQuery。


あなたの論理は逆です、真は偽を意味します。
ブライアンシュロス

2
文字列に空白がある場合、falseを返します。ロジックは逆です
Christopher Francisco

問題のその正規表現は、文字列に空白のみがあるパターンをチェックし、空白で始まり、1つ以上の空白があり、空白で終わります。
Priya Ranjan Singh

回答:


240

入力文字列でindexOfメソッドを使用するだけです。

function hasWhiteSpace(s) {
  return s.indexOf(' ') >= 0;
}

または、単純なRegExでテストメソッドを使用できます。

function hasWhiteSpace(s) {
  return /\s/g.test(s);
}

これにより、タブなどの他の空白文字もチェックされます。


17
これは、他の種類の空白(たとえば、\ t)をチェックしません。
バーナードチェン

3
s.indexOf(/ ^ \ s + $ /)も入れられませんか?
ゾイドバーグ、

2
これはIE8ではサポートされていません(フレンドリーなfyi ...)
gloomy.penguin 2013年

@ CMS&@Bernard-機能しません[s.indexOf( '')は機能します]
Shawn Rebelo

21

あなたの正規表現は、そのままでは何にも一致しません。あなたは間違いなく引用符を削除する必要があります- "/"文字で十分です。

/^\s+$/文字列がすべて空白かどうかを確認しています:

  • ^ 文字列の先頭に一致します。
  • \s+ は、少なくとも1、おそらくそれ以上のスペースを意味します。
  • $ 文字列の末尾と一致します。

正規表現を/\s/(引用符なしで)置き換えてみてください


1

この関数は、スペース(タブ、キャリッジリターンなど)だけでなく、他の種類の空白をチェックします。

import some from 'lodash/fp/some'
const whitespaceCharacters = [' ', '  ',
  '\b', '\t', '\n', '\v', '\f', '\r', `\"`, `\'`, `\\`,
  '\u0008', '\u0009', '\u000A', '\u000B', '\u000C',
'\u000D', '\u0020','\u0022', '\u0027', '\u005C',
'\u00A0', '\u2028', '\u2029', '\uFEFF']
const hasWhitespace = char => some(
  w => char.indexOf(w) > -1,
  whitespaceCharacters
)

console.log(hasWhitespace('a')); // a, false
console.log(hasWhitespace(' ')); // space, true
console.log(hasWhitespace(' ')); // tab, true
console.log(hasWhitespace('\r')); // carriage return, true

Lodashを使用したくない場合は、some2 を使用した簡単な実装を次に示しますs

const ssome = (predicate, list) =>
{
  const len = list.length;
  for(const i = 0; i<len; i++)
  {
    if(predicate(list[i]) === true) {
      return true;
    }
  }
  return false;
};

それからちょうど置き換えるsomessome

const hasWhitespace = char => some(
  w => char.indexOf(w) > -1,
  whitespaceCharacters
)

ノードの場合は、以下を使用します。

const { some } = require('lodash/fp');

0

これが私の推奨する検証です:

var isValid = false;

// Check whether this entered value is numeric.
function checkNumeric() {
    var numericVal = document.getElementById("txt_numeric").value;

    if(isNaN(numericVal) || numericVal == "" || numericVal == null || numericVal.indexOf(' ') >= 0) {
        alert("Please, enter a numeric value!");
        isValid = false;
    } else {
        isValid = true;
    }
}

0

使用できる簡単な方法の1つは、元の文字列の長さと文字列の長さを比較して、空白を何も置き換えないようにすることです。例えば:

function hasWhiteSpaces(string) {
    if (string.length == string.replace(" ", "").length) {return false}
    return true
}

0

言語に追加することで、はるかに簡単になり、早期復帰を利用できます。

// Use includes method on string
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return whitespaceChars.some(char => s.includes(char));
}

// Use character comparison
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return Array.from(s).some(char => whitespaceChars.includes(char));
}

const withSpace = "Hello World!";
const noSpace = "HelloWorld!";

console.log(hasWhiteSpace(withSpace));
console.log(hasWhiteSpace(noSpace));

console.log(hasWhiteSpace2(withSpace));
console.log(hasWhiteSpace2(noSpace));

私はパフォーマンスベンチマークを実行しませんでしたが、これらは正規表現よりも高速であるはずですが、小さなテキストスニペットの場合は、それほど大きな違いはありません。


0

他のいくつかは答えを投稿しています。いくつかの明らかな問題があります。falseたとえば、正規表現がパスしたときに返され、^and $演算子が開始/終了を示しているのに対し、質問では(任意の)空白が検索されますが、空白のみが含まれます(正規表現がチェックしている)。

その上、問題は単なるタイプミスです。

これを変える...

var reWhiteSpace = new RegExp("/^\s+$/");

これに...

var reWhiteSpace = new RegExp("\\s+");

RegExp()で正規表現を使用する場合、次の2つのことを行う必要があります...

  • 開始/括弧と終了括弧を省略します。
  • 、すなわち、すべてのシーケンスコードをダブルエスケープ\\sの代わりに\sなど、

ソースコードから完全に機能するデモ...

$(document).ready(function(e) { function hasWhiteSpace(s) {
        var reWhiteSpace = new RegExp("\\s+");
    
        // Check for white space
        if (reWhiteSpace.test(s)) {
            //alert("Please Check Your Fields For Spaces");
            return 'true';
        }
    
        return 'false';
    }
  
  $('#whitespace1').html(hasWhiteSpace(' '));
  $('#whitespace2').html(hasWhiteSpace('123'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
" ": <span id="whitespace1"></span><br>
"123": <span id="whitespace2"></span>

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