2012-01-20 13 views
7

मुझे एक (जावास्क्रिप्ट अनुपालन) रेगेक्स चाहिए जो किसी स्ट्रिंग को छोड़कर किसी भी स्ट्रिंग से मेल खाएगा जिसमें केवल व्हाइटस्पेस है। मामले:रेगेक्स जो सभी व्हाइटस्पेस को छोड़कर कुछ भी मेल खाता है

" "   (one space) => doesn't match 
" "  (multiple adjacent spaces) => doesn't match 
"foo"  (no whitespace) => matches 
"foo bar" (whitespace between non-whitespace) => matches 
"foo "  (trailing whitespace) => matches 
" foo"  (leading whitespace) => matches 
" foo " (leading and trailing whitespace) => matches 
+4

जिज्ञासा से बाहर, तो आप इस पहले के लिए खोज का प्रयास किया? –

+0

हाँ मैंने किया, पूरी तरह से अस्वीकृत संस्करण के बारे में भूल गया .. हालांकि! जिन्होंने उत्तर दिया है उन सभी को धन्यवाद! –

+0

रेगेक्स का उपयोग करने के बजाय, आप 'if (str.trim()) {// match} ' – Shmiddty

उत्तर

14

यह कम से कम एक गैर व्हाइटस्पेस चरित्र की तलाश में है।

/\S/.test(" ");  // false 
/\S/.test(" ");  // false 
/\S/.test("");   // false 


/\S/.test("foo");  // true 
/\S/.test("foo bar"); // true 
/\S/.test("foo "); // true 
/\S/.test(" foo"); // true 
/\S/.test(" foo "); // true 

मैं मैं कि एक खाली स्ट्रिंग खाली स्थान के केवल पर विचार किया जाना चाहिए संभालने हूँ लगता है।

कोई रिक्त स्ट्रिंग (जो तकनीकी रूप से सभी खाली स्थान के शामिल नहीं है, क्योंकि यह कुछ भी नहीं होता है) टेस्ट पास करना चाहिए, तो यह करने के लिए बदल ...

/\S|^$/.test("  ");      // false 

/\S|^$/.test("");  // true 
/\S|^$/.test(" foo "); // true 
1
/^\s*\S+(\s?\S)*\s*$/ 

डेमो:

var regex = /^\s*\S+(\s?\S)*\s*$/; 
var cases = [" "," ","foo","foo bar","foo "," foo"," foo "]; 
for(var i=0,l=cases.length;i<l;i++) 
    { 
     if(regex.test(cases[i])) 
      console.log(cases[i]+' matches'); 
     else 
      console.log(cases[i]+' doesn\'t match'); 

    } 

काम कर डेमो: http://jsfiddle.net/PNtfH/1/

1

इस अभिव्यक्ति को आजमाएं:

/\S+/ 

\ एस का अर्थ किसी भी गैर-सफेद स्थान पर है।

+2

' +' की आवश्यकता नहीं भी देख सकते हैं। – Phrogz

0
if (myStr.replace(/\s+/g,'').length){ 
    // has content 
} 

if (/\S/.test(myStr)){ 
    // has content 
} 
0

[मैं कर रहा हूँ नहीं कर रहा हूँ] के जवाब सबसे अच्छा है:

/\S/.test("foo"); 

वैकल्पिक रूप से आप कर सकते हैं:

/[^\s]/.test("foo"); 
संबंधित मुद्दे

 संबंधित मुद्दे