Javascript.RU

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

Странная проверка соответствия регулярного выражения.
Доброго времени суток, уважаемые форумчане!

Сразу к делу:
<input type="text" class="BossInp" id="BossFam" />


$('.BossInp').change(function(){

var RegBoss = /[a-zA-Zа-яА-ЯёЁ]{3,20}$/gi;

var BossIn = $('.BossInp').val();

var result = RegBoss.test(BossIn);

var BossFaml = $('#BossFam').val();

var BossFamRes = RegBoss.test(BossFaml);

});


Имеется несколько тегов инпут, объединенных в класс BossInp и имеющих уникальные ID.
Задача скрипта в проверке соответствия содержимого тегов <input type="text" /> регулярному выражению RegBoss.

Странность (по крайней мере для моего печального понимания js) в том,

что в случае с "var result = RegBoss.test(BossIn);" проверка проходит корректно. Но "var BossFamRes = RegBoss.test(BossFaml);" возвращает false в любом случае. Весь мозг себе сломал и вынужден беспокоить Вас.

Благодарю за понимание!
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2016, 15:15
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Потому что var
BossIn = $('.BossInp').val();

возвращает набор данных из которого берется первый элемент, а
$('#BossFam').val();
возвращает значение конкретного инпута с id BossFam. Возможно, этот инпут не идет первым в наборе, возвращаемым
var BossIn = $('.BossInp').val();


Советую вывести отладочные сообщения на экран типа
alert(BossIn);
alert(BossFaml);
Ответить с цитированием
  #3 (permalink)  
Старый 15.02.2016, 15:34
Новичок на форуме
Отправить личное сообщение для Tesla Посмотреть профиль Найти все сообщения от Tesla
 
Регистрация: 15.02.2016
Сообщений: 3

Сообщение от destus Посмотреть сообщение
Потому что var
BossIn = $('.BossInp').val();

возвращает набор данных из которого берется первый элемент, а
$('#BossFam').val();
возвращает значение конкретного инпута с id BossFam. Возможно, этот инпут не идет первым в наборе, возвращаемым
var BossIn = $('.BossInp').val();


Советую вывести отладочные сообщения на экран типа
alert(BossIn);
alert(BossFaml);
речь идет об одном и том же поле для ввода.
скрипт повешен на собитие изменения в классе. и проверяет, на сколько я понимаю, текущий элемент т.к. протестировал остальные поля ввода.
Alert - пробовал, от куда и знаю значения.
Могу, конечно написать аналогичные функции для всех 18 полей, но хотелось бы поступить разумнее)

Последний раз редактировалось Tesla, 15.02.2016 в 15:44. Причина: не учел того, что получатель не узнает о том, чтоему ответили...
Ответить с цитированием
  #4 (permalink)  
Старый 15.02.2016, 15:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Tesla,
$('.BossInp').change(function(){

var RegBoss = /[a-zA-Zа-яА-ЯёЁ]{3,20}$/gi;

var BossIn = this.value;

var result = RegBoss.test(BossIn);

alert(result)

});
Ответить с цитированием
  #5 (permalink)  
Старый 15.02.2016, 15:47
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Тогда уберите глобальный поиск в регулярке. Это происходит, потому что свойство lastindex равно длине строки и регулярное выражение сопоставляется с пустой строкой. Подробнее https://developer.mozilla.org/ru/doc...gExp/lastIndex

var RegBoss = /[a-zA-Zа-яА-ЯёЁ]{3,20}$/i;


<input type="text" class="BossInp" id="BossFam" value="AAA" />
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var RegBoss = /[a-zA-Zа-яА-ЯёЁ]{3,20}$/i;
            var BossIn = $('.BossInp').val();
            var result = RegBoss.test(BossIn);
            var BossFaml = $('#BossFam').val();
            var BossFamRes = RegBoss.test(BossFaml);
            alert(result);
            alert(BossFamRes);
</script>

Последний раз редактировалось destus, 15.02.2016 в 15:49.
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2016, 16:03
Новичок на форуме
Отправить личное сообщение для Tesla Посмотреть профиль Найти все сообщения от Tesla
 
Регистрация: 15.02.2016
Сообщений: 3

Сообщение от destus Посмотреть сообщение
Тогда уберите глобальный поиск в регулярке. Это происходит, потому что свойство lastindex равно длине строки и регулярное выражение сопоставляется с пустой строкой. Подробнее https://developer.mozilla.org/ru/doc...gExp/lastIndex

var RegBoss = /[a-zA-Zа-яА-ЯёЁ]{3,20}$/i;


<input type="text" class="BossInp" id="BossFam" value="AAA" />
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var RegBoss = /[a-zA-Zа-яА-ЯёЁ]{3,20}$/i;
            var BossIn = $('.BossInp').val();
            var result = RegBoss.test(BossIn);
            var BossFaml = $('#BossFam').val();
            var BossFamRes = RegBoss.test(BossFaml);
            alert(result);
            alert(BossFamRes);
</script>
Destus, огромное Вам человеческое спасибо за уделенное время!
Вы просто гений

Последний раз редактировалось Tesla, 15.02.2016 в 16:03. Причина: ошибка
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь с составлением регулярного выражения Дмитрий Витальевич Общие вопросы Javascript 2 02.04.2014 21:19
Формирование регулярного выражения spo jQuery 1 18.10.2013 21:36
Нужна помощь в составлении регулярного выражения voloxa89 jQuery 4 13.12.2012 22:43
Не работает шаблон для регулярного выражения Andrei Серверные языки и технологии 1 03.04.2010 09:48
Выделить целое слово на русском с помощью регулярного выражения! timdenice Общие вопросы Javascript 6 11.02.2010 12:59