Некоректная работа .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(); //Вызываем функцию
То есть регулярку прописать в функции то работает нормально. Но нужно реализовать первый вариант так как для каждого поля разные регулярные выражения. Код написан сокращенно - типа отладочного что бы не парится с ненужными строками. Буду признателен за помощь. |
звучит интересно, но не получилось воспроизвести
выложите где-нибудь полный пример пожалуйста |
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") ); //Вызываем функцию
|
<!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 не спасает ситуэйшн. |
Модификатор g убери
|
Цитата:
|
| Часовой пояс GMT +3, время: 15:09. |