Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   регулярное выражение (https://javascript.ru/forum/jquery/19208-regulyarnoe-vyrazhenie.html)

martinss 28.07.2011 20:58

регулярное выражение
 
Добрый день, столкнулся с проблемой: нужно написать регулярное выражение для проверки поля "логин" которое может содержать только символы: a-zA-Z0-9_ и длина его от 4 до 15 символов. Проверка должна реагировать на посимвольный ввод с клавиатуры.

По документации http://javascript.ru/basic/regular-expression
что-то написал, но почему-то тупо косячит:

например если вводить: aaaaaaa - то true
если вводить @@aaaaaaa то тоже true
но если ввести @@@@@@ то уже false

теряюсь в догадках... может кто знает как исправить это?

Заранее спасибо..


$(document).ready(function(){  
	$("#name").keyup(function(){
		check_uname();
	});	
	$("#name").focus(function(){
		check_uname();
	});		
	$("#name").blur(function(){
		check_uname();
	});
});

function check_uname(){
	var r = true;
	var uname = $("#name").val();
	if(validater_username(uname)){
		if((uname.length >= 4)&&(uname.length <= 15)){
			$("#uname_help").css({
				"background-image": "url('/images/validyesno.png')",
				"background-position": "0 bottom"
			});
			$("#uname_help").attr({title: "OK"});
		}
		else{
			$("#uname_help").css({
				"background-image": "url('/images/validyesno.png')",
				"background-position": "0 top"
			});
			$("#uname_help").attr({title: "Ошибка: длина логина от 4 до 15 символов!"});
			r = false;
		}
	}
	else{
		$("#uname_help").css({
			"background-image": "url('/images/validyesno.png')",
			"background-position": "0 top"
		});
		$("#uname_help").attr({title: "Ошибка: разрешено использовать только английские буквы, цифры и знак подчеркивания!"});
		r = false;
	}
	return r;	
}

function validater_username(username) {
	var pattern = new RegExp(/[0-9a-z_]+/i);
	return pattern.test(username);
}	


<input type="text" name="uname" id="name"/>

monolithed 28.07.2011 21:24

Вы не исключили символы, которые вводить нельзя:
<input id="input" value="" />

<script>
document.getElementById('input').oninput = function() {
     this.value = this.value.replace(/[^\d\w_]/g, '');
};
</script>

martinss 28.07.2011 21:29

RegExp(/^[a-zA-Z0-9_]+$/);

вот решение

monolithed 28.07.2011 21:36

Цитата:

Сообщение от martinss
вот решение

много лишнего, еще раз посмотрит код выше

martinss 28.07.2011 21:57

так буквы и подчеркивание нужны! а у тебя одни только цифры.
и потом - не совсем в хорошем тоне запрещать пользователю ввод символов без сообщения об ошибке.
Человек пытается ввести, а у него не получается.
А если добавлять к твоему коду уведомление, то будет тоже много)))

Решение безусловно хорошее, но для полей, более важных чем username.

Все равно спасибо!

Kolyaj 29.07.2011 12:46

Цитата:

Сообщение от martinss
может содержать только символы: a-zA-Z0-9_ и длина его от 4 до 15 символов

А откуда берутся такие ограничения?


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