Странно работает регулярка в JS
Написал регулярку для валидации e-mail, она оч странно работает, в первый вызов true, в следующий false. Проверил в php - все работает.
Бентчмарк: var rules = new Array(); rules['email'] = /[\w_\-\.]+@[\w_\-\.]+\.\w{2,4}/ig; email = 'abc@mail.ru'; setInterval(function(){console.log( rules['email'].test( email ) )}, 500); Подскажите, в чем проблема? |
Используйте
email.match(rules['email']) |
rules - не массив, быдлокодер:-/
|
нашел я решение, проблема в том, что lastIndex не обнуляется после каждой итерации, надо убрать модификатор g и поставить конец строки $:
Цитата:
Цитата:
|
_axl,
Это особенности регулярок ... Выход: не использовать ключ g или формировать регулярку во время тестирования 1 вариант <div id="show"></div> <script type="text/javascript"> var d = document.getElementById('show'), email = 'abc@mail.ru', rules = new Array(); rules['email'] = /[\w_\-\.]+@[\w_\-\.]+\.\w{2,4}/i; setInterval(function(){d.innerHTML+= rules['email'].test( email )+"<br />"}, 500); </script> 2 вариант <div id="show"></div> <script type="text/javascript"> var d = document.getElementById('show'), email = 'abc@mail.ru'; setInterval(function(){d.innerHTML+= new RegExp("[\\w_\\-\\.]+@[\\w_\\-\\.]+\\.\\w{2,4}","ig").test( email )+"<br />"}, 500); </script> |
Цитата:
|
О Госпаде, а я то думал, мне щас шамбалу откроют :D
|
Цитата:
var rules = new String(); rules['email'] = /[\w_\-\.]+@[\w_\-\.]+\.\w{2,4}/ig; Т.е. массив вы используете не по назначению. Вам нужно var rules = {}; |
Ну как бы массив я использую, т.к. правил валидации может быть много, и я хочу хранить их в одной переменной.
И я не спорю, можно как и объект хранить,но какая разница в данном случае? |
_axl
Разница в том, что Вы можете написать rules = {} и избавиться от негодования в свой адрес со стороны Умных Людей. |
Часовой пояс GMT +3, время: 19:36. |