Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Некоректная работа .test() (https://javascript.ru/forum/jquery/39115-nekorektnaya-rabota-test.html)

Bond 16.06.2013 19:53

Некоректная работа .test()
 
Здравствуйте. Решил написать функцию валидации полей формы вот код
function valid(a){
	$('.names').blur(function(){
		var vall = $(this).val(); //Снимаем значение поля
		var	rezult = (a).test(vall); //Сравниваем с регуляркой
			alert(rezult);
	});}
valid((/^[а-я\-]+$/ig) ); //Вызываем функцию

Как видно из кода переменной а передаю регулярку.
Так вот если сделать как написано сейчас при срабатывании события blur() alert будет попеременно выдавать то true то false - это при том что значение поля не меняется.
А если сделать так
function valid(){
	$('.names').blur(function(){
		var vall = $(this).val(); //Снимаем значение поля
		var	rezult = (/^[а-я\-]+$/ig).test(vall); //Сравниваем с регуляркой
			alert(rezult);
	});}
valid(); //Вызываем функцию

То есть регулярку прописать в функции то работает нормально.
Но нужно реализовать первый вариант так как для каждого поля разные регулярные выражения.
Код написан сокращенно - типа отладочного что бы не парится с ненужными строками.
Буду признателен за помощь.

mta88 16.06.2013 20:14

звучит интересно, но не получилось воспроизвести
выложите где-нибудь полный пример пожалуйста

рони 16.06.2013 20:29

Bond,
используйте полную форму записи RegExp а не литеральную
function valid(a){
       alert(a);
       var vall = 'тест-тест'; //Снимаем значение поля
	   var	rezult = (a).test(vall); //Сравниваем с регуляркой
			alert(rezult);
       var vall = 'тест-test'; //Снимаем значение поля
	   var	rezult = (a).test(vall); //Сравниваем с регуляркой
			alert(rezult);
	}
valid(new RegExp("^\[а-я\\-\]\+\$","ig") ); //Вызываем функцию

Bond 16.06.2013 20:37

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<form action="">
		<input type="text" name="names" class="names" >
		<input type="submit">
	</form>
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"  type="text/javascript"></script>
	<script>
	$(document).ready(function(){
	function valid(a){
	$('.names').blur(function(){
		var vall = $(this).val(); //Снимаем значение поля
		var	rezult = (a).test(vall); //Сравниваем с регуляркой
			alert(rezult);
	});}
	valid((/^[а-я\-]+$/ig) );
});
	</script>
</body>
</html>

Вот полный код на котором можно протестить. Если ввести по регулярке правильное значение в поле (русские буквы и дефис) то при инициировании события blur() alert будет попеременно выдавать то true то false/
Использование полной записи RegExp не спасает ситуэйшн.

danik.js 16.06.2013 20:47

Модификатор g убери

Bond 16.06.2013 20:56

Цитата:

Сообщение от danik.js
Модификатор g убери

Спасибо, работает


Часовой пояс GMT +3, время: 06:07.