Как запретить ввод чисел в форму с помощью JavaScript

Это часть моей многоэтапной регистрационной формы, и она работает нормально. Но я хочу добавить проверку номера в переменную «student_name», чтобы система не позволяла студенту вводить число в свое имя.

if (step === 2) {
    // Example: check if username is not empty
    var student_name = document.querySelector('#student_name').value;
    if (student_name === '') {
        isValid = false;
        Swal.fire({
            icon: 'error',
            title: 'Field still empty'
        });
    } else if (student_name.length < 3 || student_name.length > 30) {
        isValid = false;
        Swal.fire({
            icon: 'info',
            title: 'the character must <3 or >30'
        });
    } else
        var student_email = document.querySelector('#student_email').value;
    if (student_email === '') {
        isValid = false;
        Swal.fire({
            icon: 'error',
            title: 'Field still empty'
        });
    } else if (!student_email.includes('@')) {
        isValid = false;
        Swal.fire({
            icon: 'error',
            title: 'Email must include "@"'
        });
    }
}

Поэтому я добавил этот код, который получил от ai.

if (/\d/.test(student_name)) {
    isValid = false;

    // Display an error message using SweetAlert
    Swal.fire({
        icon: 'error',
        title: 'Error',
        text: 'number is not allowed in student name.'
    });
}

Итак, это мой код после того, как я добавлю этот код.

if (step === 2) {
    // Example: check if username is not empty
    var student_name = document.querySelector('#student_name').value;
    if (student_name === '') {
        isValid = false;
        Swal.fire({
            icon: 'error',
            title: 'Field still empty'
        });
    } else if (student_name.length < 3 || student_name.length > 30) {
        isValid = false;
        Swal.fire({
            icon: 'info',
            title: 'the character must <3 or >30'
        });
    }
    // new added code (start)
     else if (/\d/.test(student_name)) {
        isValid = false;
    
        // Display an error message using SweetAlert
        Swal.fire({
            icon: 'error',
            title: 'Error',
            text: 'number is not allowed in student name'
        });
    }
    // new added code (end)
     else
        var student_email = document.querySelector('#student_email').value;
    if (student_email === '') {
        isValid = false;
        Swal.fire({
            icon: 'error',
            title: 'Field still empty'
        });
    } else if (!student_email.includes('@')) {
        isValid = false;
        Swal.fire({
            icon: 'error',
            title: 'Email must include "@"'
        });
    }
}

Но это не сработало - сообщения об ошибке нет.

Как выглядит HTML-форма?

chrwahl 27.03.2024 16:29

«Я хочу добавить проверку числа в переменную «student_name». Тогда откуда взялся nama_siswa? Это нигде не определено. Вы должны получить сообщение об ошибке, связанное с доступом к необъявленной переменной.

VLAZ 27.03.2024 16:31

Достойная проверка формы должна выполняться не с помощью JavaScript (кроме Node.js), а с помощью встроенного метода проверки с использованием атрибута required, чтобы форма могла автоматически проверять себя!

tacoshy 27.03.2024 16:31

Пожалуйста, ознакомьтесь с разделом Как спрашивать, а затем измените заголовок, чтобы задать что-то более конкретное.

isherwood 27.03.2024 17:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
88
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я думаю, ошибка кроется в имени переменной nama_siswa.

Вместо этого вам следует использовать имя студента в качестве переменной для проверки с регулярным выражением /d, представляющим цифры от 0 до 9.

Итак, ваш код должен выглядеть так:

// new added code (start)
 else if (/\d/.test(student_name)) {
    isValid = false;

    // Display an error message using SweetAlert
    Swal.fire({
        icon: 'error',
        title: 'Error',
        text: 'number is not allowed in student name'
    });
}
// new added code (end)

HTML-формы проверяют себя.

Чтобы проверить, имеет ли имя длину от 3 до 30 символов, вы можете добавить атрибуты minlength = "3" и maxlength = "30".

Электронная почта может быть проверена, если входные данные имеют атрибут type = "email".

Все, что вам нужно сделать, это добавить атрибут required к входным данным, и он даже выдаст локализованное сообщение об ошибке, которое зависит от языка системы пользователя:

<form>
  <label for = "name">Name:</label>
  <input type = "text" id = "name" minlength = "3" maxlength = "30" required>
  
  <br>
  
  <label for = "email">E-Mail:</label>
  <input type = "email" required>
  
  <br><br>
  
  <input type = "submit">
</form>

PS: Не стоит просить ИИ программировать за вас. ИИ просто выполнит ваше приглашение и предоставит ответ на его основе. ИИ не скажет вам, если вы изначально зададите неправильный вопрос (XY-проблема).

Вы можете использовать встроенную проверку формы. Для ученика назовите минимальную и максимальную длину и, возможно, какой-нибудь шаблон.

Для отображения оповещения вы можете использовать недействительное событие, которое запускается, когда что-то в форме недействительно.

Форма будет отправлена ​​только в том случае, если вся форма действительна.

document.forms.form01.addEventListener('invalid', e => {
  e.preventDefault();
  swal({
    title: e.target.title,
    icon: "error",
  });
}, true);

document.forms.form01.addEventListener('submit', e => {
  e.preventDefault();
  console.info('submitting...');
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/sweetalert/2.1.2/sweetalert.min.js" integrity = "sha512-AA1Bzp5Q0K1KanKKmvN/4d3IRKVlv9PYgwFPvm32nPO6QS8yH1HO7LbgB1pgiOxPtfeg5zEn2ba64MUcqJx6CA= = " crossorigin = "anonymous" referrerpolicy = "no-referrer"></script>
<form name = "form01">
  <label>Student name:<input type = "text" name = "student_name" minlength = "3"
    maxlength = "30" pattern = "[^\d]+"
    title = "Student name must be between 3 and 30 characters and no digits"
    required></label>
  <label>Student email:<input type = "email" name = "student_email"
  title = "The email must be a valid email address" required></label>
  <button>Submit</button>
</form>

Я думаю, что Ален Гави прав: ваша проблема в том, что регулярное выражение проверяет переменную с именем nama_siswa вместо student_name. Однако хочу добавить, что помимо цифр в поле имени вы можете столкнуться с массой других проблем.

Например, в Юникоде есть массив числовых символов, которые не обрабатываются \d. В некоторых случаях вы можете использовать \p{n} для сопоставления всех символов Юникода с «числовым» свойством, но, похоже, это пока не очень хорошо реализовано в браузерах. Некоторые обходные пути можно найти здесь: Как я могу использовать регулярные выражения с поддержкой Unicode в JavaScript?

Если вы знаете местоположение своих пользователей и можете ожидать, что они будут использовать языки, основанные на латинском алфавите, возможно, будет проще ограничить ввод набором разрешенных символов. Однако вы должны быть достаточно снисходительны, чтобы разрешить такие варианты, как é и ñ. Я настоятельно рекомендую программу RegexBuddy для проверки вашего регулярного выражения на возможные имена.

Наконец, я настоятельно рекомендую выполнить дополнительную проверку серверной части. Если плохие символы могут испортить другие ваши скрипты, то вы не можете полагаться только на проверку на основе браузера. Серверу необходимо проверить введенные данные и убедиться, что они соответствуют, прежде чем они будут сохранены.

Другие вопросы по теме