Опять регулярка))))

220
03 декабря 2017, 14:33

Простейшая регулярка и я не пойму в чем ошибка. Нужно проверять что бы в строке не было "@"

Моя регулярка

reg = /^[^@]{3,30}$/g;

но при использовании вижу следующее

reg = /^[^@]{3,30}$/g; 
console.log(reg.test('dddd')); //true 
console.log(reg.test('ddddd')); //false

Как так?

Answer 1

Как указано в справке

Как и при вызове метода exec() (или при совместном с ним вызове), метод test(), вызванный несколько раз на одном и том же экземпляре регулярного выражения, будет начинать проверку с конца предыдущего сопоставления.

Поэтому при следующем вызове reg.test проверка идет не с начала строки, а, в данном случае, с 4 индекса.

Как указано в английском ответе это происходит из-за флага g.

В случае его отсутствия работать будет ожидаемо:

reg = /^[^@]{3,30}$/; 
console.log(reg.test('dddd')); //true 
console.log(reg.test('ddddd')); //false

READ ALSO
не работает show.bs.modal

не работает show.bs.modal

При показе модели, игнорируется JS, а точнее 'showbs

222
JS Tabs не переключаются вкладки

JS Tabs не переключаются вкладки

Знатоки, подскажите, пожалуйста, как переключиться на другую вкладку?

164
Не получается найти кнопку через getElementById

Не получается найти кнопку через getElementById

Через инспектор кнопка находится, а вот через JS нетИспользую такой код:

154
Как предать данные из материала K2 в Chronoforms, которая встроена в страницу?

Как предать данные из материала K2 в Chronoforms, которая встроена в страницу?

Хочу передать данные из дополнительных полей материала K2 в форму Chronoforms 6Форма встроена в материал через шорткод {chronoforms6}myform{/chronoforms6}

282