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.


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.


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)


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

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

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
}

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.


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>

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.