2013-09-25 3 views
0

У меня есть строка, как этотRegex для сопоставления текста содержат только пробельные и бр тег

     <br />      <br />    <br /> 

или иногда

  <br />   <br /> 

или

  <br /> 

как можно проверить, если строка только содержат пробелы и br в Javascript? EX: если (./\ С */тест (содержание)) { }

+1

я бы подумал, что это тривиально: '/^(\ S | ] *>) + $/i' –

ответ

2

Есть две вещи, которые вы хотите проверить и разрешить, пропуски и <br />, так что предполагает чередование позволяя ноль или более повторений, закрепленную на обоих концах:

if(/^(?:\s|<br \/>)*$/.test(content)){ } 

, что означает:

  • ^ - начало ввода
  • (?:...) - не-захвата группы
  • \s - любой одиночный символ пробела
  • | - чередование позволяет вещи по обе стороны от него
  • <br \/> - соответствуют литеральной строке <br /> (обратите внимание, что нам нужно было избежать /)
  • * - ноль или более вещи, которые пошли раньше, без захвата группы
  • $ - конец ввода

Если есть шанс, что пространство или солидуса внутри тега не может быть там, или пространство может быть повторен, а затем:

if(/^(?:\s|<br *\/?>)*$/.test(content)){ } 

Добавление * после того, как пространство позволяет там быть равен нулю, или несколько, пробелов; добавив ? после солидуса (/), он может быть там (один раз) или нет.

Примечание: Вышеприведенное не допускает никаких признаков в теге br, например. <br class="foo" />, <br data-foo="bar"/> и т. Д. Он также соответствует пустым строкам.

Чтобы для атрибутов, но по-прежнему соответствовать пустым строкам:

if(/^(?:\s|<br[^>]*>)*$/.test(content)){ } 
// Change ----^^^^ 

Чтобы разрешить для атрибутов и DISALLOW пустых строк (должен иметь по крайней мере один пробел или один br тега):

if(/^(?:\s|<br[^>]*>)+$/.test(content)){ } 
// Change ------- ---^ 
+0

он работает как шарм.thanks so much –

+0

@ NTThái: Рад, что помогло! –

-1
"^\s*<br />$" 

Дает линии с любым количеством пробелов (в том числе входит и вкладки!) И заканчивая "
"

2

Давайте эту строку, например:

var input = " <br /> "; 

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

var testData = input.replace(/\s/g, ''); 
//in this example, testData will now be "<br/>" 

вы можете выполнить регулярное выражение для проверки существование только <br/>:

var regex = /^(?:<br\/>)*$/; 
var isValid = regex.test(testData); 

Here is a working example

+0

FWIW: нет необходимости в 'replace', или для группы захвата в последнем тесте. –

+0

@ T.J.Crowder: Собственно, группа захвата требуется (попробуйте удалить ее со своей ссылки на скрипку). Я знаю, что замена не нужна, мне просто не нравится работать с беспорядочным вводом, и мне нравится поддерживать как можно меньше регулярных выражений - или старайтесь не использовать их вообще – musefan

+1

@ musefan: вам нужна * группа *, но не группа захвата, поэтому '*' относится ко всему: 'var regex =/^ (?: ) * $ /;' [скрипка] (http://jsfiddle.net/jD2V4/1/) (группы захвата в теории делают больше работы для двигателя rex, хотя я надеюсь, что 'test' оптимизирует их!). –

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