Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение - проверка ввода (https://javascript.ru/forum/misc/36919-regulyarnoe-vyrazhenie-proverka-vvoda.html)

тома 01.04.2013 08:16

Регулярное выражение - проверка ввода
 
Всем привет.

Чтобы проверить соответствует ли значение шаблону установлена проверка:
<input type="text" id="test2"  name="test2"  
		   value=""
		   onblur="if(!/^[А-Я][а-я]*/.test(this.value)) {alert('Неверный формат ввода'); this.value='';}"
		   size="37">


Чтобы запретить ввод не допускаемых символов:
<input type="text" id="test"  name="test"  
		   value=""
		   onkeyup="if(/[^а-яА-Я\s]/.test(this.value))this.value=this.value.replace(/[^а-яА-Я\s]+/g,'')"
		   size="37">


Скажите пожалуйста, можно ли объединить эти две проверки, чтобы сразу при вводе удалялись запрещенные символы?

И скажите пожалуйста, на текстовые поля такие как ФИО не принято же ставить маски ввода, да?

ksa 01.04.2013 09:04

Цитата:

Сообщение от тома
на текстовые поля такие как ФИО не принято же ставить маски ввода, да?

Если есть желание - почему не поставить... :)
Например можно запретить ввод цифр (Пётр 1 тогда не прокатит) или запретить английские буквы...

ksa 01.04.2013 09:06

Цитата:

Сообщение от тома
можно ли объединить эти две проверки

Разумеется.
Напиши функцию, которая выполняет оба кода и вызывай её в тех событиях...

тома 01.04.2013 09:55

Цитата:

Сообщение от ksa (Сообщение 243644)
Разумеется.
Напиши функцию, которая выполняет оба кода и вызывай её в тех событиях...

Я не много не правильно описала что хочу...
Я хотела узнать, можно ли событие
onblur="if(!/^[А-Я][а-я]*/.test(this.value)) {alert('Неверный формат ввода'); this.value='';}"


переделать в событие onkeyup?
у меня не получается....

ksa 01.04.2013 10:06

Цитата:

Сообщение от тома
Я хотела узнать, можно ли событие
onblur="if(!/^[А-Я][а-я]*/.test(this.value)) {alert('Неверный формат ввода'); this.value='';}"

переделать в событие onkeyup?
у меня не получается....

Дык

onkeyup="if(!/^[А-Я][а-я]*/.test(this.value)) {alert('Неверный формат ввода'); this.value='';}"

тома 01.04.2013 10:55

ksa, нет:)

чтобы сразу при вводе удалялись запрещенные символы?

то есть на событие onkeyup, мне не нужно выводить alert(), а сразу сделать замену надо недоступного символа на пустое значение как в примере this.value=this.value.replace(), чтобы не допустить ввод запрещенных символов...
Или это очень сложно?

Hekumok 01.04.2013 11:08

Вот, недоступные символы сразу заменяются, что не так?
<input type="text" id="test" name="test" value="" size="37">
<script>
function replace() {
 this.value = this.value.replace(/[^а-яА-Я\s]+/g,'') ;
} ;
document.getElementById("test").onkeyup = replace ;
</script>

тома 01.04.2013 12:08

:) похоже я совсем не понятно объяснилась...

Hekumok, так Вы же показали тот пример который и так работает.
А мне нужно такую замену написать для шаблона:
^[А-Я][а-я]*

вот это как раз таки и не получается.

Hekumok 01.04.2013 17:19

Так? Или как? Объясните нормально, что вам нужно, что вы хотите
<input type="text" id="test" name="test" value="" size="37">
<script>
function replace() {
 this.value = this.value.replace(/^[А-Я][а-я]*/g,'') ;
} ;
document.getElementById("test").onkeyup = replace ;
</script>

тома 02.04.2013 07:26

да, так... только пример то не работает, какой бы символ я не ввела - замены не происходит...

Попытаюсь еще раз объяснить:
Данный пример, не позволяет пользователю вводить в текстовое поле ничего кроме русских букв и пробела.
<input type="text" id="test"  name="test" 
	           value=""
	           onkeyup="if(/[^а-яА-Я\s]/.test(this.value))this.value=this.value.replace(/[^а-яА-Я\s]+/g,'')"
	           size="37">

Мне нужно изменить этот пример так, чтобы пользователь первым символом мог ввести только заглавную русскую букву, а все остальные символы допускается вводить только маленькими русскими или пробел.
Понятно объяснила или опять не очень? :write:

Hekumok 02.04.2013 12:00

Так что ли?
<input type="text" id="test" name="test" value="" size="37">
<script>
function replace() {
 if(this.value.length==1) {
  if(/^[^А-ЯЁ]$/.test(this.value)) this.value = "" ;
 } else if(/[^а-яё ]/.test(this.value[this.value.length-1])) this.value = this.value.slice(0,-1) ;
} ;
document.getElementById("test").onkeyup = replace ;
</script>

megaupload 02.04.2013 12:45

Цитата:

Сообщение от Hekumok
Так что ли?

да, именно так!!

Hekumok 02.04.2013 16:55

Цитата:

Сообщение от megaupload
да, именно так!!

A ты откуда знаешь?)

тома 03.04.2013 07:22

Да, супер! То, что нужно!
Hekumok, благодарю Вас!
спасибо, что научили))))))))))

AliceSh 02.02.2019 15:10

а у меня разрешает ввести почему-то только 1й символ и все((

ksa 07.02.2019 15:38

Предложу такой вариант...

<input type="text" id="test" name="test" value="" size="37">
<script>
function replace() {
	var val=this.value
	if (!/^[А-ЯЁ][а-яё\s]+$/.test(val)) {
		this.value=val.replace(/(^[а-яё])|[^А-ЯЁа-яё\s]/g,'');
	};
};
document.getElementById("test").onkeyup = replace ;
</script>

Malleys 07.02.2019 16:11

Цитата:

Сообщение от ksa
Предложу такой вариант...

Не понял, но оно всё вводит, даже латиницу...

Предложу такой вариант...
<input id="test" name="test" size="37" oninput="replace(this)">
<script>
function replace(input) {
	input.value = input.value.split(/((?:[А-ЯЁ][а-яё]*\s*)+)/, 2)[1] || "";
};
</script>

ksa 08.02.2019 07:45

Цитата:

Сообщение от Malleys
даже латиницу

У меня не вводит... Сразу удаляет... :blink:

ksa 08.02.2019 07:47

Цитата:

Сообщение от Malleys
oninput="replace(this)"

Авторша хотела onkeyup... :D

Malleys 08.02.2019 11:50

Автор хотела, чтобы не вводились запрещенные символы.
Цитата:

Сообщение от тома
Скажите пожалуйста, можно ли объединить эти две проверки, чтобы сразу при вводе удалялись запрещенные символы?

Хотя автор и упомянула событие keyup, которое в случае ввода с клавиатуры происходит, всё же стоит учитывать, что оно происходит только тогда, когда отпускают клавишу на клавиатуре. Если вы хотите отслеживать ввод, то тут возможны ложные срабатывания... Например, это событие происходит, когда фактически ввод не поменялся (нажали стрелки и пр.) Оно не срабатывает, когда долго зажата клавиша, что-то было выбрано из буфера обмена, или перетянуто в текстовое поле. Автору не важно каким образом был произведён ввод! Автор хотела, чтобы не вводились запрещенные символы вообще, а не то, чтобы не вводились запрещённые символы только если отпустили клавишу.


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