Простейшая регулярка и я не пойму в чем ошибка. Нужно проверять что бы в строке не было "@"
Моя регулярка
reg = /^[^@]{3,30}$/g;
но при использовании вижу следующее
reg = /^[^@]{3,30}$/g;
console.log(reg.test('dddd')); //true
console.log(reg.test('ddddd')); //false
Как так?
Как указано в справке
Как и при вызове метода exec() (или при совместном с ним вызове), метод test(), вызванный несколько раз на одном и том же экземпляре регулярного выражения, будет начинать проверку с конца предыдущего сопоставления.
Поэтому при следующем вызове reg.test проверка идет не с начала строки, а, в данном случае, с 4 индекса.
Как указано в английском ответе это происходит из-за флага g.
В случае его отсутствия работать будет ожидаемо:
reg = /^[^@]{3,30}$/;
console.log(reg.test('dddd')); //true
console.log(reg.test('ddddd')); //false
Сборка персонального компьютера от Artline: умный выбор для современных пользователей