ฉันจะตรวจสอบได้อย่างไรว่าสตริงมีอักขระและช่องว่างไม่ใช่เฉพาะช่องว่าง


140

วิธีใดที่ดีที่สุดในการตรวจสอบว่าสตริงมีเฉพาะช่องว่างหรือไม่

สตริงได้รับอนุญาตให้มีอักขระรวมกับช่องว่าง แต่ไม่ใช่เฉพาะช่องว่าง

คำตอบ:


300

แทนที่จะตรวจสอบสตริงทั้งหมดเพื่อดูว่ามีเพียงช่องว่างหรือไม่ให้ตรวจสอบว่ามีอักขระที่ไม่ใช่ช่องว่างอย่างน้อยหนึ่งอักขระหรือไม่ :

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
ระวังให้ myString เป็นค่าว่าง มันจะกลับมาจริง: /\S/.test(null) == true
Dilshod Tadjibaev

6
คำตอบเหล่านี้จำนวนมากมี regex อยู่ในตัว! นี่หมายความว่าไม่มีวิธีดั้งเดิมในการตรวจจับสิ่งต่างๆใน js? ไม่มีสตริง IsWhitespace หรืออะไร? ไม่มีการตัดแต่งแบบพื้นเมืองหรือไม่?
JonnyRaa

5
@JonnyLeeds เนื่องจาก regex มีการสนับสนุนไวยากรณ์ใน js ด้วยซ้ำใคร ๆ ก็บอกได้ว่ามันเป็นภาษาพื้นเมืองมากกว่าวิธียูทิลิตี้ที่จัดส่งมา;)
Ricardo van den Broek

44

คำตอบที่ง่ายที่สุดหากเบราว์เซอร์ของคุณรองรับtrim()ฟังก์ชันนี้

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

ปัจจุบันเมื่อ IE 8 เป็น RIP นี่เป็นโซลูชันที่สะอาดที่สุดและมีประสิทธิภาพมากที่สุดโดยอาศัยการใช้งานแบบเนทีฟ และทำงานได้อย่างถูกต้องกับแท็บและบรรทัดใหม่
Alexander Abakumov

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

การตรวจสอบนี้สำหรับ 1 หรือช่องว่างมากกว่าตัวอักษรถ้าคุณมันยังตรงกับสตริงที่ว่างเปล่าแล้วแทนที่ด้วย+*


18

ถ้าคุณใช้ jQuery มันจะง่ายกว่า

if ($.trim(val).length === 0){
   // string is invalid
} 

1
ใช้ได้กับการขึ้นบรรทัดใหม่และแท็บเช่นกันในขณะที่ตัวอย่าง regex ข้างต้นไม่ได้เป็นเพียงการมองหาสิ่งที่ไม่มีอะไรเลยนอกจากพื้นที่สีขาว แม้ว่าฉันแน่ใจว่าคนที่มีความรู้เกี่ยวกับ regex สามารถสร้าง regex ที่รวม tab / newline ไว้ในการค้นหาได้
Kate

ไม่ทำงานเมื่อ val ถูกกำหนดช่องว่างในกรณีของฉันมีช่องว่างสี่ช่อง
user1451111

7

เพียงตรวจสอบสตริงกับ regex นี้:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
วิธีที่ฉันอ่านคำถามบอกว่าอนุญาต / any / whitespace ตราบใดที่สตริงไม่ใช่ / only / whitespace มันเงียบว่าจะทำอย่างไรถ้าสตริงว่างดังนั้นอาจเป็นไปได้ว่าคำตอบของ nickf ยังดีกว่า
Ian Clelland


0

นิพจน์ทั่วไปที่ฉันใช้สำหรับเมื่อฉันต้องการให้มีช่องว่างตรงกลางสตริงของฉัน แต่ไม่ใช่ที่จุดเริ่มต้นหรือจุดสิ้นสุดคือ:

[\S]+(\s[\S]+)*

หรือ

^[\S]+(\s[\S]+)*$

ดังนั้นฉันรู้ว่านี่เป็นคำถามเก่า แต่คุณสามารถทำสิ่งต่างๆเช่น:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

หรือคุณสามารถทำสิ่งที่nickfพูดและใช้:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

ฉันใช้วิธีการต่อไปนี้เพื่อตรวจสอบว่าสตริงมีเฉพาะช่องว่างหรือไม่ นอกจากนี้ยังจับคู่สตริงว่าง

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

วิธีนี้สามารถแก้ปัญหาได้อย่างรวดเร็ว

return input < "\u0020" + 1;

นั่นreturn input < " 1"; เป็นเพียงแค่การเปรียบเทียบตามตัวอักษร ตราบใดที่อินพุตถูกจัดเรียงต่ำกว่า "1" ก็จะส่งกลับค่าจริง ตัวอย่าง: return " asdfv34562345" < "\u0020" + 1;ประเมินเป็นจริง
Derek Ziemba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.