Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.03.2011, 11:03
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

Странно работает регулярка в 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);

Подскажите, в чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 09.03.2011, 11:21
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Используйте
email.match(rules['email'])
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2011, 11:41
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

rules - не массив, быдлокодер
Ответить с цитированием
  #4 (permalink)  
Старый 09.03.2011, 13:36
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

нашел я решение, проблема в том, что lastIndex не обнуляется после каждой итерации, надо убрать модификатор g и поставить конец строки $:
Цитата:
rules['email'] = /[\w_\-\.]+@[\w_\-\.]+\.\w{2,4}$/i;
Цитата:
rules - не массив, быдлокодер
к чему это вообще? а что это по-твоему?
Ответить с цитированием
  #5 (permalink)  
Старый 09.03.2011, 13:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

_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>
Ответить с цитированием
  #6 (permalink)  
Старый 09.03.2011, 13:47
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Цитата:
к чему это вообще? а что это
Это "ассоциативный массив" ("хэш") или просто объект, если быть совсем Ъ.
Ответить с цитированием
  #7 (permalink)  
Старый 09.03.2011, 14:02
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

О Госпаде, а я то думал, мне щас шамбалу откроют
Ответить с цитированием
  #8 (permalink)  
Старый 09.03.2011, 14:04
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от _axl
var rules = new Array();
rules['email'] = /[\w_\-\.]+@[\w_\-\.]+\.\w{2,4}/ig;
Эта запись равносильна
var rules = new String();
rules['email'] = /[\w_\-\.]+@[\w_\-\.]+\.\w{2,4}/ig;

Т.е. массив вы используете не по назначению. Вам нужно
var rules = {};
Ответить с цитированием
  #9 (permalink)  
Старый 09.03.2011, 14:10
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

Ну как бы массив я использую, т.к. правил валидации может быть много, и я хочу хранить их в одной переменной.
И я не спорю, можно как и объект хранить,но какая разница в данном случае?

Последний раз редактировалось _axl, 09.03.2011 в 14:14.
Ответить с цитированием
  #10 (permalink)  
Старый 09.03.2011, 14:19
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

_axl

Разница в том, что Вы можете написать rules = {} и избавиться от негодования в свой адрес со стороны Умных Людей.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт работает только если подключать js в самом низу html! Pekkonen jQuery 3 26.01.2011 01:44
JS работает в Опере, Хроме и Сафари, и не работает в IE & Mozilla Aliena Javascript под браузер 5 04.12.2010 08:15
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
не работает выхов JS в IE AntiBuger Internet Explorer 11 08.06.2010 16:03
JS меню работает на обычной html странице, а на юкозовском движке нет. adware Я не знаю javascript 10 16.05.2009 16:48