จะตรวจสอบได้อย่างไรว่าตัวแปรเป็น null หรือสตริงว่างหรือช่องว่างทั้งหมดใน JavaScript?


102

ฉันต้องการตรวจสอบว่าตัวแปรเป็นโมฆะหรือมีช่องว่างทั้งหมดหรือว่างเปล่า ("")

ฉันมีสิ่งต่อไปนี้ แต่ใช้งานไม่ได้:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

หากฉันทำสิ่งต่อไปนี้ได้ผล:

if (addr) {

}​

String.IsNullOrWhiteSpace(value)สิ่งที่ฉันต้องการเป็นสิ่งที่ต้องการวิธี C #


3
คุณหมายถึงจริงhas *any* empty spacesเหรอ? หรือคุณหมายถึงis all empty spaces?
Madbreaks

1
แล้ว undefined ล่ะ?
CodeToad

คำตอบ:


139

โซลูชันที่ไม่ใช่ jQuery ซึ่งเลียนแบบได้ใกล้เคียงมากขึ้นIsNullOrWhiteSpaceแต่เพื่อตรวจหาค่าว่างว่างเปล่าหรือช่องว่างทั้งหมดเท่านั้น:

function isEmptyOrSpaces(str){
    return str === null || str.match(/^ *$/) !== null;
}

... แล้ว:

var addr = '  ';

if(isEmptyOrSpaces(addr)){
    // error 
}

* แก้ไข * โปรดทราบว่า op ระบุโดยเฉพาะ:

ฉันจำเป็นต้องตรวจสอบเพื่อดูว่า var เป็นโมฆะหรือมีช่องว่างใด ๆ หรือว่าเรื่องเพียงว่างเปล่า

ในขณะที่ใช่ "ช่องว่าง" ครอบคลุมมากกว่าว่างช่องว่างหรือว่างคำตอบของฉันมีไว้เพื่อตอบคำถามเฉพาะของ op นี่เป็นสิ่งสำคัญเนื่องจาก op อาจไม่ต้องการจับสิ่งต่างๆเช่นแท็บเป็นต้น


66
ช่องว่างอาจรวมถึงแท็บช่องว่างประเภทอื่น ๆ ฯลฯ ใช้/^\s*$/เพื่อจับสิ่งเหล่านั้นด้วย
ให้สิทธิ์

2
@Grant ผมตั้งใจไม่ได้ทำเพราะสหกรณ์กล่าวว่า"ผมจำเป็นต้องตรวจสอบเพื่อดูว่า var เป็นโมฆะหรือมีช่องว่างใด ๆ หรือสำหรับเรื่องที่เพิ่งว่างเปล่า"
Madbreaks

5
แล้วการใช้ test () แทนการจับคู่ () ล่ะ? ส่งคืน str === null || (/ ^ * $ /). ทดสอบ (str);
Mario Levrero

1
@MarioLevrero ชอบ! testยังเร็วกว่าที่ฉันจำได้
Madbreaks

10
@Madbreaks the op ระบุว่า "สิ่งที่ฉันต้องการก็เหมือนกับวิธี C # นี้: String.IsNullOrWhiteSpace" วิธีนี้ถือว่าแท็บเป็นช่องว่าง
subsci

25
if (addr == null || addr.trim() === ''){
  //...
}

การnullเปรียบเทียบก็จะจับundefinedได้เช่นกัน ถ้าคุณต้องการfalseผ่านเกินไปให้ใช้!addr. สำหรับการแลกเปลี่ยนถอยหลังเบราว์เซอร์ที่เข้ากันได้สำหรับaddr.trim()$.trim(addr)


1
"ถ้าคุณต้องการให้เท็จผ่านด้วยให้ใช้! addr" - แบ่งออกหากaddrเป็นศูนย์
Madbreaks

1
ทำไมเป็นคนแรก==และการจับคู่ที่สอง===?
สูงสุด

การใช้ "addr == null" จะจับคู่กับ undefined ด้วย หากคุณใช้ "addr === null" มันจะจับคู่กับค่าว่างเท่านั้น การใช้ === สำหรับการจับคู่ครั้งที่สองบังคับให้จับคู่กับสตริงว่างเท่านั้น
Ed Downs

19

คุณสามารถใช้ได้ if(addr && (addr = $.trim(addr)))

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

อ้างอิง: http://api.jquery.com/jQuery.trim/


2
สมมติว่าแน่นอนว่าฝ่ายปฏิบัติการต้องการลบช่องว่าง :)
Madbreaks

1
คำตอบของคุณจะส่งคืนค่าบวกเท็จหากaddrมีการกำหนดค่าเริ่มต้นด้วยเช่นจำนวนเต็ม
Madbreaks

หากไม่มีข้อมูลเพิ่มเติมฉันถือว่า var เป็นสตริงเสมอหากไม่ใช่ null / ไม่ได้กำหนด
ThiefMaster

1
Op พูดว่า "ตรวจสอบว่าตัวแปร ... " และตัวอย่างของเขาแสดงให้เห็นว่าตัวแปรนั้นเป็นสตริง แต่ฉันคิดว่านั่นเป็นเพียงตัวอย่างเพื่อแสดงความคิด
Madbreaks

5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}

2
จำเป็นต้องทำซ้ำคำตอบที่มีอยู่หรือไม่? หรือคุณเปลี่ยนแปลงอะไรกับคำตอบก่อนหน้านี้ที่สร้างความแตกต่างที่เกี่ยวข้องหรือไม่?
Nico Haase

4

คุณสามารถสร้างวิธีการของคุณเองได้เทียบเท่ากับ

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}

1
\sตรงกับช่องว่างมากกว่า
Madbreaks

4

เมื่อตรวจสอบช่องว่างวิธี c # ใช้มาตรฐาน Unicode พื้นที่สีขาวประกอบด้วยช่องว่างแท็บการส่งคืนแคร่ตลับหมึกและรหัสอักขระอื่น ๆ ที่ไม่ได้พิมพ์ ดังนั้นคุณจึงควรใช้:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}

Op ระบุอย่างชัดเจนว่าเป้าหมายคือการตรวจสอบช่องว่างไม่ใช่ช่องว่าง
Madbreaks

5
Op พูดว่า "สิ่งที่ฉันต้องการคือเมธอด C # นี้: String.IsNullOrWhiteSpace (value)" และถ้าคุณเพียงแค่ตรวจสอบช่องว่างอย่าตั้งชื่อฟังก์ชันของคุณเป็น NullOrWhiteSpace แต่ให้ตั้งชื่อว่า IsNullOrEmtpy
Joao Leme

วิธีการ C # จะใช้เพื่อตรวจสอบว่าสตริงเป็นโมฆะหรือชุดของช่องว่าง Op ต้องการบางสิ่งที่ "เหมือน" แต่เพื่อตรวจสอบช่องว่างโดยเฉพาะ
Madbreaks


4

คำถามเก่า แต่ฉันคิดว่ามันไม่เหมาะกับคำตอบที่ง่ายกว่า

คุณสามารถทำได้ง่ายๆ:

var addr = "  ";

if (addr && addr.trim()) {

    console.log("I'm not null, nor undefined, nor empty string, nor string composed of whitespace only.");

}

1
ควรaddr && addr.trim()หรือไม่? มีเพียงหนึ่งเดียว&มันไม่ได้ทำงานสำหรับฉัน &&แต่มันจะมี
markv12

0

ลองดูสิ

/**
  * Checks the string if undefined, null, not typeof string, empty or space(s)
  * @param {any} str string to be evaluated
  * @returns {boolean} the evaluated result
*/
function isStringNullOrWhiteSpace(str) {
    return str === undefined || str === null
                             || typeof str !== 'string'
                             || str.match(/^ *$/) !== null;
}

คุณสามารถใช้มันได้เช่นนี้

isStringNullOrWhiteSpace('Your String');



0

คุณสามารถลองสิ่งนี้:

do {
   var op = prompt("please input operatot \n you most select one of * - / *  ")
} while (typeof op == "object" || op == ""); 
// execute block of code when click on cancle or ok whthout input
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.