Регулярное выражение, которое соответствует всему, кроме пробелов - PullRequest
13 голосов
/ 21 января 2012

Мне нужно регулярное выражение (совместимое с javascript), которое будет соответствовать любой строке, кроме строки, содержащей только пробел. Случаи:

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

Ответы [ 5 ]

21 голосов
/ 21 января 2012

Это ищет по крайней мере один непробельный символ.

/\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 голос
/ 21 января 2012

Попробуйте это выражение:

/\S+/

\ S означает любой непробельный символ.

1 голос
/ 21 января 2012
/^\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/

0 голосов
/ 21 января 2012

[Не я] ответ лучший:

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

В качестве альтернативы вы можете сделать:

/[^\s]/.test("foo");
0 голосов
/ 21 января 2012
if (myStr.replace(/\s+/g,'').length){
  // has content
}

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