2012-04-19 1 views
-1

, как я могу получить регулярное выражение, которое позволяет только 0000 или пробелы, но не оба, как я могу получить регулярное выражение, которое позволяет только 0000 или пространства

примеры:

  1. 0000000000000000000 -> OK;
  2. только пробелы -> OK;
  3. 000000000 0000 -> Не хорошо;
  4. afads0000 00 0fd -> Not Ok;
+3

Что-то вроде (не уверен, что Javascript версия): '/^(0+ | \ S +) $ /' – taro

+0

Разрешена ли пустая строка? –

+0

@Tim Pietzcker, Спасибо, теперь я тоже это понял :) – taro

ответ

6
^(?:0+| +)$ 

Объяснение:

^  # Start of string 
(?: # Either match (but don't capture)... 
0+ # one or more zeroes 
|  # or 
[ ]+ # one or more spaces 
)  # End of non-capturing group (used to contain the alternation) 
$  # End of string 
+0

'?:' Означает, что это не захватывающая группа – fcalderan

+0

@ F.Calderan: Right; Я улучшил свое объяснение соответствующим образом. –

+0

+1 Спасибо за объяснения !, вы забыли объяснить, что такое '+' ... – gdoron

0

Это должно работать: (0+)|(+), не так ли?

+0

Это по-прежнему соответствует средней части 'abc000def'. –

1

EDIT: Этот ответ применим только в том случае, если вы допустите пробелы ведущего и/или конечного. Единственный пример, приведенный в вопросе о пространствах, вызывающих отказ, - это место, в котором пространство разделяет последовательности 0.

Если нет, вам понадобится регулярное выражение, например, в @Tim Pietzcker's answer.


Вы могли бы сделать ToNumber преобразование вместо регулярных выражений, так как строка только с пробелами будут преобразованы в 0, а также ведущие/ведомые пробелы будут игнорироваться.

Здесь я использую унарный оператор + для преобразования в номер.

if (+str === 0) { 
    // pass 
} 

Одно предостережение в том, что пустая строка также будет преобразован в 0. Если это нежелательно, вы можете сначала протестировать .length.

if (str.length && +str === 0) { 
    // pass 
} 

"0000000000000000000" // pass 
" 000 "   // pass 
"  "    // pass 
"000000000 0000"  // fail 
"afads0000 00 0fd"  // fail 

"" // pass first solution, fail second solution 
+0

'Number (" 000 ")' возвращает '0' тоже, не так ли? –

+0

@TimPietzcker: Да, возможно, я неправильно интерпретировал это в требованиях. –

+0

@TimPietzcker: Ду!Он говорит * «не оба» *. Удаление ... –

Смежные вопросы