Как заставить ввод только разрешить буквы альфа?
Используя jQuery здесь, однако не может предотвратить ввод чисел в поле ввода
http://codepen.io/leongaban/pen/owbjg
вход
<input type="text" name="field" maxlength="8"
title="Only Letters"
value="Type Letters Only"
onkeydown="return alphaOnly(event);"
onblur="if (this.value == '') {this.value = 'Type Letters Only';}"
onfocus="if (this.value == 'Type Letters Only') {this.value = '';}"/>
JQuery
function alphaOnly(event) {
alert(event);
var key;
if (window.event) {
key = window.event.key;
} else if (e) {
key = e.which;
}
//var key = window.event.key || event.key;
alert(key.value);
return ((key >= 65 && key <= 90) || (key >= 95 && key <= 122));
}
Я видел множество примеров того, как ограничить только числа, и я использую правильные коды клавиш для аз и аз. Вы видите, что я делаю не так?
12 ответов
Недвижимость event.key
дал мне неопределенное значение. Вместо этого я использовал event.keyCode
:
function alphaOnly(event) {
var key = event.keyCode;
return ((key >= 65 && key <= 90) || key == 8);
};
Обратите внимание, что значение 8 для клавиши возврата.
Короткий ONELINER:
<input ... onkeypress="return /[a-z]/i.test(event.key)" >
Для всех букв Юникода попробуйте это регулярное выражение: /\p{L}/u
( но... это) - и вот рабочий пример:)
Вместо того, чтобы полагаться на коды клавиш, которые могут быть довольно громоздкими, вы можете вместо этого использовать регулярные выражения. Изменяя шаблон, мы можем легко ограничить входные данные в соответствии с нашими потребностями. Обратите внимание, что это работает с keypress
событие и позволит использовать забой (как в принятом ответе). Это не помешает пользователям вставлять "незаконные" символы.
function testInput(event) {
var value = String.fromCharCode(event.which);
var pattern = new RegExp(/[a-zåäö ]/i);
return pattern.test(value);
}
$('#my-field').bind('keypress', testInput);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
Test input:
<input id="my-field" type="text">
</label>
В новых браузерах вы можете использовать:
<input type="text" name="country_code"
pattern="[A-Za-z]" title="Three letter country code">
Вы можете использовать регулярные выражения для ограничения полей ввода.
Хороший однострочный HTML только:
<input type="text" id='nameInput' onkeypress='return ((event.charCode >= 65 && event.charCode <= 90) || (event.charCode >= 97 && event.charCode <= 122) || (event.charCode == 32))'>
Многие другие решения, использующие нажатие клавиш, не будут работать на мобильных устройствах, вам нужно использовать ввод.
html
<input type="text" id="name" data-value="" autocomplete="off" spellcheck="true" placeholder="Type your name" autofocus />
jQuery
$('#name').on('input', function() {
var cursor_pos = $(this).getCursorPosition()
if(!(/^[a-zA-Z ']*$/.test($(this).val())) ) {
$(this).val($(this).attr('data-value'))
$(this).setCursorPosition(cursor_pos - 1)
return
}
$(this).attr('data-value', $(this).val())
})
$.fn.getCursorPosition = function() {
if(this.length == 0) return -1
return $(this).getSelectionStart()
}
$.fn.setCursorPosition = function(position) {
if(this.lengh == 0) return this
return $(this).setSelection(position, position)
}
$.fn.getSelectionStart = function(){
if(this.lengh == 0) return -1
input = this[0]
var pos = input.value.length
if (input.createTextRange) {
var r = document.selection.createRange().duplicate()
r.moveEnd('character', input.value.length)
if (r.text == '')
pos = input.value.length
pos = input.value.lastIndexOf(r.text)
} else if(typeof(input.selectionStart)!="undefined")
pos = input.selectionStart
return pos
}
$.fn.setSelection = function(selectionStart, selectionEnd) {
if(this.lengh == 0) return this
input = this[0]
if(input.createTextRange) {
var range = input.createTextRange()
range.collapse(true)
range.moveEnd('character', selectionEnd)
range.moveStart('character', selectionStart)
range.select()
}
else if (input.setSelectionRange) {
input.focus()
input.setSelectionRange(selectionStart, selectionEnd)
}
return this
}
<input type="text" name="field" maxlength="8"
onkeypress="return onlyAlphabets(event,this);" />
function onlyAlphabets(e, t) {
try {
if (window.event) {
var charCode = window.event.keyCode;
}
else if (e) {
var charCode = e.which;
}
else { return true; }
if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123))
return true;
else
return false;
}
catch (err) {
alert(err.Description);
}
}
события keypress , keyup и keydown не работают на мобильных устройствах. А также
KeyboardEvent.keyCode
больше не рекомендуется. Итак, я нашел новый способ с
input
событие и
RegExp
. Он отлично работает со всеми типами устройств.
Вы можете сделать что-то подобное, предполагая, что у вас есть более одного входа:
Это позволяет использовать пробел и возврат -> (charCode == 8 || charCode == 32). Если вам это не нужно, вы можете удалить это условие.
Вы можете подписаться на «InputEvent», а затем получить опору «data». Например
input.addEventListener('beforeinput', (event) => {
const data = event.data;
// if "data" is present - user enter some character
// if "data" is NOT present - user tap non character key (e.g. delete, shift and other)
if(data) {
// check if data is not number
const isAllow = /\D/.test(data);
if(!isAllow) {
e.preventDefault();
}
}
})
Больше информации
- event.data - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent/data
- событие перед вводом - https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/beforeinput_event
<input type="text" name="name" id="event" onkeydown="return alphaOnly(event);" required />
function alphaOnly(event) {
var key = event.keyCode;`enter code here`
return ((key >= 65 && key <= 90) || key == 8);
};
Если ваша форма основана на PHP, она будет работать таким образом в вашем коде " Php $ data = array (":
'onkeypress' => 'return /[a-z 0-9]/i.test(event.key)',