วิธีที่ดีที่สุดในการทดสอบสตริงว่างด้วย jquery-out-of-the-box คืออะไร?


229

วิธีที่ดีที่สุดในการทดสอบสตริงว่างด้วย jquery-out-of-the-box นั่นคือไม่มีปลั๊กอิน? ฉันพยายามนี้

แต่มันก็ไม่ได้ผลอย่างที่คิด มันคงจะดีถ้าได้ใช้สิ่งที่มีอยู่ในตัว

ฉันไม่ต้องการพูดซ้ำ

if (a == null || a=='')

ทุกที่ถ้า if (isempty(a)) มี



คำตอบ:


556
if (!a) {
  // is emtpy
}

วิธีละเว้นพื้นที่สีขาวสำหรับสตริง:

if (!a.trim()) {
    // is empty or whitespace
}

หากคุณต้องการการสนับสนุนมรดก (IE8-) สำหรับtrim()การใช้งาน$.trimหรือpolyfill


10
@CoffeeAddict สตริงว่างเปล่าเป็นเท็จในจาวาสคริปต์ดังนั้นใช่นิพจน์ประเมินว่าเป็นจริงถ้าaเป็น "" หรือค่าเท็จอื่น ๆ (null, เท็จ, ไม่ได้กำหนด, 0, NaN)
David Hellsing

21
หากคุณจำเป็นต้องตรงกับสายที่มีเพียงช่องว่างมันเป็นความคิดที่ดีในการใช้งานif (!$.trim(a))
Ilari Kajaste

3
จากประสบการณ์ของฉันเวลาส่วนใหญ่ที่คุณต้องการเรียกใช้การทดสอบนี้คุณต้องการรวมการทดสอบสำหรับช่องว่างด้วย เนื่องจากเป็นกรณีปกติ OP ควรรวมไว้ในคำตอบของเขาความคิดเห็นจาก @IlariKajaste
Bane

17
คำตอบที่ได้รับการยอมรับจะล้มเหลวเมื่อคุณใส่ 0 แต่มันจะทำงานสำหรับ 1, 2, 3, 4 และอื่น ๆ
สตีเว่น

5
ไม่ได้เป็นif (!a.trim())บิตอันตรายหรือไม่? เกิดอะไรขึ้นถ้าaไม่ได้กำหนดหรือเป็นโมฆะ?
Timo

27

ลิงก์ที่คุณให้ดูเหมือนจะพยายามทำสิ่งที่แตกต่างจากการทดสอบที่คุณพยายามหลีกเลี่ยงการทำซ้ำ

if (a == null || a=='')

ทดสอบว่าสตริงนั้นเป็นสตริงว่างหรือโมฆะ บทความที่คุณเชื่อมโยงกับการทดสอบว่าสตริงประกอบด้วยช่องว่างทั้งหมด (หรือว่างเปล่า)

การทดสอบที่คุณอธิบายสามารถถูกแทนที่ด้วย:

if (!a)

เนื่องจากใน javascript สตริงว่างและ null ทั้งคู่ประเมินว่าเป็นเท็จในบริบทบูลีน


if(!a)มันจะล้มเหลวสำหรับสตริงที่ประกอบด้วยการพูด 4 ช่องว่างหรือไม่? ``
KNU

@KNU ใช่ แต่คำถามถามเกี่ยวกับสตริงว่างและสตริงที่ประกอบด้วยช่องว่างไม่ใช่สตริงว่าง ดูสิ่งที่ฉันเขียนเกี่ยวกับความแตกต่างระหว่างสิ่งที่ถูกถามกับสิ่งที่โค้ดที่เชื่อมโยงทำ
SpoonMeiser

คำตอบนี้ผิด มันปฏิบัติต่อ '0' เหมือนสตริงว่างซึ่งไม่ใช่
John Henckel

@JohnHenckel: มันจะรักษา0เช่นสตริงที่ว่างเปล่า "0"แต่ไม่ ฉันคิดว่านั่นคือสิ่งที่คุณหมายถึงอะไร เป็นไปได้ว่าสิ่งนี้กำลังถูกใช้ในสถานการณ์ที่คุณรู้ว่าaเป็นสตริงหรือโมฆะ แต่ใช่ สิ่งที่ต้องระวัง
SpoonMeiser

25

จากคำตอบของดาวิดฉันชอบที่จะตรวจสอบวัตถุที่ให้มาก่อนถ้าเป็นสตริงเลย มิฉะนั้นการเรียก.trim()วัตถุที่ไม่มีอยู่จะทำให้เกิดข้อยกเว้น:

function isEmpty(value) {
  return typeof value == 'string' && !value.trim() || typeof value == 'undefined' || value === null;
}

การใช้งาน:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false

ฉันตรวจสอบด้วย <br /> <p> </p> จาก textarea และมันบอกว่าไม่ว่างเปล่าเท่าที่ควร
kreamik

5

ตรวจสอบว่าข้อมูลเป็นสตริงว่างเปล่า (และละเว้นพื้นที่สีขาว) ด้วย jQuery:

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}

5

การตรวจสอบทั้งหมด 'เปล่า' เหมือนโมฆะ undefined, '', '', {} []

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

ใช้เคสและผลลัพธ์

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

3
if(!my_string){ 
// stuff 
}

และ

if(my_string !== "")

ถ้าคุณต้องการยอมรับค่าว่าง แต่ปฏิเสธค่าว่าง

แก้ไข: วูบวาบลืมสภาพของคุณคือถ้ามันว่างเปล่า


2

ลองดำเนินการนี้ในคอนโซลเบราว์เซอร์ของคุณหรือในแบบจำลอง node.js

var string = ' ';
string ? true : false;
//-> true

string = '';
string ? true : false;
//-> false

ดังนั้นโครงสร้างกิ่งอย่างง่ายจะเพียงพอสำหรับการทดสอบ

if(string) {
    // string is not empty
}

1
จะดีกว่าถ้าพูดว่า "!! string" แทนที่จะเป็น "string? true: false" หรือแม้แต่แค่ "string"
アレックス

2

เนื่องจากคุณสามารถป้อนหมายเลขรวมทั้งสตริงประเภทคงที่คำตอบจึงควรเป็น:

function isBlank(value) {
  return $.trim(value);
}

มันไม่ควรเป็นแบบนี้เหรอ? return !!$.trim(value);
พุธที่

-1

ลองสิ่งนี้

if(!a || a.length === 0)

OP ระบุไว้โดยเฉพาะว่าพวกเขากำลังมองหาทางเลือกนี้
Wayne

-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}

ถ้า a nullนั้นa.trim()จะล้มเหลว นี่เป็นคำสั่งที่ไม่ถูกต้องในการตรวจสอบสิ่งต่าง ๆ และถ้าคุณเปลี่ยนคำสั่งคำตอบของคุณไม่ได้ให้อะไรเลยที่ไม่ได้รับการแนะนำมาก่อน
Mike Scotty
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.