2012-01-20 30 views
7

Tôi cần một regex (tuân thủ javascript) sẽ khớp với bất kỳ chuỗi nào ngoại trừ một chuỗi chỉ chứa khoảng trắng. Trường hợp:Regex khớp với bất kỳ thứ gì ngoại trừ tất cả khoảng trắng

" "   (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

Ra khỏi tò mò, bạn đã cố gắng tìm kiếm đầu tiên này? –

+0

Vâng tôi đã làm, hoàn toàn quên về phiên bản phủ định của \ s mặc dù .. doh! Cám ơn mọi người đã phản hồi! –

+0

Thay vì sử dụng regex, bạn cũng có thể kiểm tra 'if (str.trim()) {// matches}' – Shmiddty

Trả lời

14

Điều này tìm kiếm ít nhất một ký tự khoảng trắng.

/\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 

Tôi đoán tôi đang giả rằng một chuỗi rỗng nên được xem xét khoảng trắng mà thôi.

Nếu một chuỗi rỗng (mà về mặt kỹ thuật không chứa tất cả các khoảng trắng, vì nó chứa gì) phải vượt qua các kiểm tra, sau đó thay đổi nó để ...

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

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

demo:

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

    } 

bản demo làm việc: http://jsfiddle.net/PNtfH/1/

1

Hãy thử cụm từ này:

/\S+/ 

\ S có nghĩa là bất kỳ ký tự không khoảng trắng nào.

+2

Không cần cho '+'. – Phrogz

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

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

[Am không Tôi] 's câu trả lời là tốt nhất:

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

Hoặc bạn có thể làm:

/[^\s]/.test("foo"); 
Các vấn đề liên quan