Bir dizede boşluk olup olmadığını kontrol edin


100

Bir dizede boşluk olup olmadığını kontrol etmeye çalışıyorum . Bu işlevi buldum ama çalışıyor gibi görünmüyor:

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

Bu arada, alıntı ekledim RegExp.

Bir sorun mu var? Kullanabileceğim daha iyi bir şey var mı? Umarım JQuery.


mantığınız geriye doğru, doğru demek yanlış.
Brian Schroth

2
Dizede boşluk varsa yanlış döndürüyorsunuz ve mantığınız ters
Christopher Francisco

Söz konusu normal ifade, dizelerde yalnızca beyaz boşluklar bulunan kalıpları kontrol eder, beyaz boşlukla başlar, bir veya daha fazla boşluk içerir ve bir boşlukla biter.
Priya Ranjan Singh

Yanıtlar:


248

Giriş dizesinde indexOf yöntemini kullanabilirsiniz :

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

Veya basit bir Normal İfadede test yöntemini kullanabilirsiniz:

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

Bu ayrıca Tab gibi diğer beyaz boşluk karakterlerini de kontrol edecektir.


19
bu, diğer beyaz boşluk türlerini kontrol etmez (örneğin, \ t).
Bernard Chen

3
s.indexOf (/ ^ \ s + $ /) yazamaz mıydınız?
Zoidberg

2
bu IE8 tarafından desteklenmiyor (sadece dostça bir ...)
gloomy.penguin

@ CMS & @Bernard - Çalışmıyor [s.indexOf ('') çalışır]
Shawn Rebelo

22

Normal ifadeniz olduğu gibi hiçbir şeyle eşleşmez. Kesinlikle tırnak işaretlerini kaldırmanız gerekiyor - "/"karakterler yeterli.

/^\s+$/dizenin TÜM beyaz boşluk olup olmadığını kontrol ediyor :

  • ^ dizenin başlangıcıyla eşleşir.
  • \s+ en az 1, muhtemelen daha fazla boşluk anlamına gelir.
  • $ dizenin sonuyla eşleşir.

Normal ifadeyi /\s/(ve tırnak işareti olmadan) değiştirmeyi deneyin


1

Bu işlev, yalnızca boşluğu (sekme, satır başı vb.) Değil, diğer beyaz boşluk türlerini de kontrol eder.

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'ı kullanmak istemiyorsanız , işte some2 ile basit bir uygulama 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;
};

Sonra sadece yerini someile ssome.

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

Düğümdekiler için şunları kullanın:

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

0

İşte benim önerdiğim doğrulama:

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

Kullanabileceğiniz basit bir yaklaşım, beyaz boşlukların hiçbir şeyle değiştirilmesini sağlamak için orijinal dizenin uzunluğunu dizenin uzunluğuyla karşılaştırmaktır. Örneğin:

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

0

Dile yapılan eklemelerle çok daha kolaydır, ayrıca erken dönüşten yararlanabilirsiniz:

// 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));

Performans karşılaştırması yapmadım ama bunlar normal ifadeden daha hızlı olmalı, ancak küçük metin parçacıkları için zaten o kadar da fark olmayacak.


0

Birkaç kişi cevaplar gönderdi. falseNormal ifade geçtiğinde döndüğü ve ^ve $işleçleri başlangıç ​​/ bitişi gösterdiği gibi bazı belirgin sorunlar vardır , oysa aranan soru (herhangi bir) boşluk içerir ve yalnızca beyaz boşluk içerir (normal ifadenin kontrol ettiği).

Bunun yanı sıra, sorun sadece bir yazım hatası.

Bunu değiştir...

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

Buna...

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

İçinde bir normal ifade kullanırken RegExp(), aşağıdaki iki şeyi yapmalısınız ...

  • Başlangıç ​​ve bitiş /parantezlerini atlayın .
  • Tüm dizi kodlarından çift çıkış yapın, yani \\syerine \svb.

Kaynak koddan tam çalışma demosu ....

$(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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.