Поскольку я думаю, что люди сталкиваются с этим много времени, прежде чем я это сделал, и может быть какое-то стандартное решение. Может ли кто-нибудь дать какое-либо подсказку, как запретить пользователю вводить символы не ascii в текстовое поле.предотвратить ввод символов без ascii в текстовом поле
ответ
Я лично считаю, мастерить со стандартными режимами взаимодействия немного раздражает, но если вы должны фильтровать ввод с клавиатуры, вы можете сделать это путем перехвата события нажатия клавиш и отменяя те, которые вы не хотите:
var allowed = /[a-zA-Z0-9]/; // etc.
window.onload = function() {
var input = document.getElementById("test");
input.onkeypress = function() {
// Cross-browser
var evt = arguments[0] || event;
var char = String.fromCharCode(evt.which || evt.keyCode);
// Is the key allowed?
if (!allowed.test(char)) {
// Cancel the original event
evt.cancelBubble = true;
return false;
}
}
};
и это более краткие и хорошеют с JQuery:
var allowed = /[a-zA-Z0-9]/; // etc.
$(function() {
var input = document.getElementById("test");
$("#input").keypress(function (e) {
// Is the key allowed?
if (!allowed.test(String.fromCharCode(e.keyCode || e.which))) {
// Cancel the original event
e.preventDefault();
e.stopPropagation();
}
});
});
ваше регулярное выражение должно быть "вар разрешено =/[A-Za-Z0-9] /;" – Vlad
@ Vlad: Спасибо, что заметили! Исправлена. –
Существует одна проблема с этим, она не позволяет пользователю забой/удалить, чтобы исправить то, что он вошел в поле и не позволяет пользователю использовать клавиши со стрелками для перемещения по полю. Есть ли более элегантный способ справиться с этим, чем просто добавив в начале функции: если (e.keyCode == 8) возвращение; if (e.keyCode == 37) return; if (e.keyCode == 38) return; if (e.keyCode == 39) return; if (e.keyCode == 40) return; –
Если вы ищете лаконичное решение ASP.NET, вы можете использовать элемент управление RegularExpressionValidator ограничить содержимое ASP.NET TextBox. Вам не нужно писать какой-либо серверный или клиентский код, отличный от определения тега страницы, и регулярное выражение, используемое для проверки. Проверка будет проверена с обеих сторон для вас.
Например:
<asp:TextBox id="txtItem" runat="server" MaxLength="50"></asp:TextBox>
<asp:RegularExpressionValidator id="SomeFieldValidator" runat="server"
CssClass="SomeClass" ControlToValidate="txtItem"
ErrorMessage="This field only accepts ASCII input." Display="Dynamic"
ValidationExpression="^[A-Za-z0-9]*$"></asp:RegularExpressionValidator>
В этом фрагменте txtItem является TextBox, который нуждается в валидации. Элемент управления SomeFieldValidator связан с использованием атрибута ControlToValidate на txtItem Управление. Атрибут ValidationExpression - это регулярное выражение, которое используется для принудительного применения содержимого TextBox. В документации это выражение должно быть записано для совместимости с регулярными выражениями JScript и .NET Regex. Кроме того, я только установил регулярное выражение для буквенно-цифровых символов. Возможно, вы захотите использовать что-то вроде ^[\ w \ s] * $ вместо этого, если вы действительно заинтересованы в печатных символах вместо ASCII.
Дополнительным преимуществом использования этого метода является то, что вы можете также вставить эти валидаторы в страницы .aspx обновляемых приложений, не требуя ничего, кроме перезапуска пула приложений.
Также удобно использовать RequiredFieldValidator управление. Вы можете связать их с Элементами TextBox, которые также имеют RegularExpressionValidator прилагается. Они обрабатывают случай ввода данных в текстовом поле .
Вот некоторые ссылки ссылки.
RegularExpressionValidator Control at MSDN
RequiredFieldValidator Control at MSDN
вам нужно сделать, это на стороне клиента делать? Почему бы не сделать это на стороне сервера? Таким образом, вы все равно можете лишать символы, которые вам не нужны, даже если пользователь отключил JavaScript. Кроме того, запрет пользователям вводить символы, отличные от ASCII, кажется немного наивным, немного passé ;-) –
Что вы подразумеваете под «non-ASCII»? Unicode символы? Или просто символы за пределами диапазона 0-127? –