Странно работает регулярка в 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, время: 13:42. |