Periksa apakah string memiliki spasi putih

96

Saya mencoba memeriksa apakah string memiliki spasi putih . Saya menemukan fungsi ini tetapi sepertinya tidak berfungsi:

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

Ngomong-ngomong, saya menambahkan kutipan ke RegExp.

Apakah ada yang salah? Apakah ada yang lebih baik yang bisa saya gunakan? Semoga JQuery.

Abs
sumber
logika Anda terbalik, benar berarti salah.
Brian Schroth
2
Anda mengembalikan false jika string memiliki spasi kosong, logika Anda mundur
Christopher Francisco
Regex yang dimaksud memeriksa pola dengan hanya spasi dalam string, dimulai dengan spasi putih, memiliki satu atau lebih spasi putih, dan diakhiri dengan spasi putih.
Priya Ranjan Singh

Jawaban:

241

Anda cukup menggunakan metode indexOf pada string input:

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

Atau Anda dapat menggunakan metode pengujian, dengan RegEx sederhana:

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

Ini juga akan memeriksa karakter spasi putih lainnya seperti Tab.

Christian C. Salvadó
sumber
18
ini tidak memeriksa jenis spasi putih lainnya (mis., \ t).
Bernard Chen
3
tidak bisakah kamu memasukkan s.indexOf (/ ^ \ s + $ /) juga?
Zoidberg
2
ini tidak didukung oleh IE8 (hanya fyi ramah ...)
gloomy.penguin
@ CMS & @Bernard - Tidak berfungsi [s.indexOf ('') berfungsi]
Shawn Rebelo
21

Regex Anda tidak akan cocok dengan apa pun, apa adanya. Anda pasti perlu menghapus tanda kutip - "/"karakternya cukup.

/^\s+$/sedang memeriksa apakah string SEMUA spasi:

  • ^ cocok dengan awal string.
  • \s+ berarti setidaknya 1, mungkin lebih, spasi.
  • $ cocok dengan ujung string.

Coba ganti regex dengan /\s/(dan tanpa tanda kutip)

Ian Clelland
sumber
1

Fungsi ini memeriksa jenis spasi putih lainnya, bukan hanya spasi (tab, carriage return, dll.)

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

Jika Anda tidak ingin menggunakan Lodash , berikut adalah someimplementasi sederhana dengan 2 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;
};

Kemudian ganti saja somedengan ssome.

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

Untuk pengguna di Node, gunakan:

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

Berikut adalah validasi yang saya sarankan:

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;
    }
}
CyborgHead
sumber
0

Salah satu pendekatan sederhana yang dapat Anda lakukan adalah membandingkan panjang string asli dengan string agar spasi putih diganti tanpa apa pun. Sebagai contoh:

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

Dengan tambahan bahasa, ini jauh lebih mudah, ditambah Anda dapat memanfaatkan pengembalian awal:

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

Saya tidak menjalankan tolok ukur kinerja tetapi ini seharusnya lebih cepat daripada regex tetapi untuk cuplikan teks kecil tidak akan ada banyak perbedaan.

snnsnn
sumber
0

Beberapa orang lain telah memposting jawaban. Ada beberapa masalah yang jelas, seperti itu kembali falseketika Regex berlalu, dan operator ^dan $menunjukkan awal / akhir, sedangkan pertanyaannya mencari memiliki spasi (ada), dan bukan: hanya berisi spasi (yang diperiksa regex).

Selain itu, masalahnya hanyalah salah ketik.

Ubah ini ...

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

Untuk ini...

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

Saat menggunakan regex dalam RegExp(), Anda harus melakukan dua hal berikut ...

  • Hilangkan /tanda kurung mulai dan akhir .
  • Escape ganda semua kode urutan, misalnya, \\sdi tempat \s, dll.

Demo kerja penuh dari kode sumber ....

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

HoldOffHunger
sumber