2013-03-31 3 views
1

Например, если у меня есть форма, и я не хочу, чтобы пользователь вводил в нее числа, и я проверяю ее с помощью функции, содержащей регулярное выражение, как предотвратить ввод недопустимого символа, введенного пользователем (в этом примере, цифра) от отображения в текстовой форме, если он не прошел проверку регулярного выражения?Как предотвратить ввод недопустимых символов в форму?

Это функция, которую я пробовал, и список выбора, который я попробовал (другими словами, это не вся программа). Я попытался вернуть false в обработчик события onkeypress, но то, что пользователь входит в текстовое поле, все еще проходит.

function noNumbers(answer) { //returns false and displays an alert if the answer contains numbers 
    if (/[\d]+/.test(answer)) { // if there are numbers 
     window.alert("You can not enter numbers in this field"); 
     return false; 
    } 

} 

<form action="get" enctype="application/x-www-form-urlencoded"> 
    <select id="questions" name="questions"> 
     <option value="no_numbers">What is the name of the city where you were born?</option> 
     <option value="no_letters">What is your phone number?</option> 
     <option value="no_numbers">What is the name of your favorite pet?</option> 
     <option value="no_letters">What is your social security number?</option> 
     <option value="no_numbers">What is your mother's maiden name?</option> 
    </select> 
    <p><input type="text" name="answer" onkeypress="validateAnswer();" /></p> 
</form> 
+0

Err ... как вы сказали, возвращая 'false' в' keypress' обработчика событий. Что вы пробовали? Мы хотим видеть код, который вы пробовали. – thejh

+0

Зачем это? Просто подтвердите это, прежде чем отправлять данные, раздражающие пользователи с ограничениями на ввод данных просто, ну, раздражают. – RobG

+0

Это для школьного задания. Вот почему я не отправлял код, когда впервые задал этот вопрос. Потому что люди в классе могут его скопировать и утверждать как свои собственные. Но я предполагаю, что я должен опубликовать код для людей здесь, чтобы понять, что случилось. – user2228537

ответ

0

Это функция, которую вы ищете

function validateAnswer(src) { 
    var questions = document.getElementById("questions"); 
    var rule = questions.options[questions.selectedIndex].value; 
    if(rule=="no_numbers") src.value = src.value.replace(/\d/g, ''); 
    if(rule=="no_letters") src.value = src.value.replace(/\w/g, ''); 
} 

просто отправить ссылку на поле ввода функции и установите его в onkeyup случае вместо:

<input type="text" name="answer" onkeyup="validateAnswer(this);" /> 

вы должны также подключить onchange событие для выбора значения поля ввода. Я предлагаю вам также рассмотреть HTML5 pattern attribute. См

+0

Я не мог понять, как это сделать с возвратом false и Unicode (это то, что сказали инструкции учебников), но я сделал что-то вроде того, что вы описали здесь, и это работает. – user2228537

0

Сделайте свою жизнь проще, добавив дополнительный параметр к вашей validateAnswer функции, как это:
<input type="text" id="answer" name="answer" onkeyup="validateAnswer(this);" />

Затем вы можете определить validateAnswer так:

function validateAnswer(elem){ 
    elem.value = elem.value.replace(/[^\d]/g, ''); 
} 

Вот пример: http://jsbin.com/iwiduq/1/

+0

Что делать, если я хочу заменить все символы '<> {} [] +'? – Si8

0

Вы получаете ключ нажатие из объекта события, переданного обработчику.

input type="text" name="answer" onkeypress="validateAnswer(this, event);" /> 

function validateAnswer(element, event) { 
    if (event.charCode) { 
    if (/\d/.test(String.fromCharCode(event.charCode))) { 
     window.alert("You can not enter numbers in this field"); 
     return false; 
    } 
    } 
} 

Поисковый запрос "onkeypress event" находит много примеров этого.

Смежные вопросы