Как проверить специальные символы при проверке формы

Я пытаюсь добавить проверку формы в свою форму. Мне удалось сделать это для длины символов, цифр, букв, и все они работают нормально, но, похоже, это не работает для специальных символов, таких как @ & * и т. д.

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

Это мой JavaScript для этого:

function ValidateActInsert() {
var specialChars = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>/?]/;
        if (document.actorInsert.actInsert.value.match(specialChars)) {
        alert ("Only characters A-Z, a-z and 0-9 are allowed!")
        document.actorInsert.actInsert.focus();
        return false;
    }
    return (true);
}

И это HTML-форма, в которой я пытаюсь это сделать:

<form name = "actorInsert" align = "center" action = "actorInserting.php" onSubmit = "return ValidateActInsert()">
    Actor name:<br>
    <input type = "text" name = "actInsert"
    <br><br>
    <input type = "submit" value = "Insert">
</form>

Сам код имеет смысл для меня, и я полагаю, что он будет работать, и я, честно говоря, понятия не имею, почему это не так.

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

Sterling Archer 25.03.2019 17:14

@SterlingArcher привел ему пример.

ABC 25.03.2019 17:16
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
4 728
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы ловили каждый символ.

Давай просто позволим a-z нижний регистр, A-Z верхний регистр и или 0-9 как сказал @SterlingArcher.

/[^a-zA-Z ]/g Разрешит только а-я и а-я

/[^a-zA-Z0-9 ]/g Разрешены только az, AZ и 0-9

Letters and Numbers:

function ValidateActInsert() {
    var specialChars = /[^a-zA-Z0-9 ]/g;
    if (document.actorInsert.actInsert.value.match(specialChars)) {
        alert ("Only characters A-Z, a-z and 0-9 are allowed!")
        document.actorInsert.actInsert.focus();
        return false;
    }
    return (true);
}
<form name = "actorInsert" align = "center" action = "actorInserting.php" onSubmit = "return ValidateActInsert()">
    Actor name:<br>
    <input type = "text" name = "actInsert"
    <br><br>
    <input type = "submit" value = "Insert">
</form>

Numbers only

function ValidateActInsert() {
    var specialChars = /[^a-zA-Z ]/g;
    if (document.actorInsert.actInsert.value.match(specialChars)) {
        alert ("Only characters A-Z, a-z are allowed!")
        document.actorInsert.actInsert.focus();
        return false;
    }
    return (true);
}
<form name = "actorInsert" align = "center" action = "actorInserting.php" onSubmit = "return ValidateActInsert()">
    Actor name:<br>
    <input type = "text" name = "actInsert"
    <br><br>
    <input type = "submit" value = "Insert">
</form>

Я предлагаю использовать https://regexr.com/ для проверки выражений и изучения некоторых примеров.

Это работает, большое спасибо! В качестве побочного вопроса, что я могу сделать, чтобы он улавливал такие вещи, как «6z», а также недопустимый ввод?

Kappa123 25.03.2019 17:16
/([6z])\w+/g Я предлагаю использовать regexr.com для проверки значений регулярного выражения. Кроме того, зависит от того, что будет классифицировать недопустимый ввод.
ABC 25.03.2019 17:18

Для этого конкретного поля разрешены только буквы, поэтому, если я ввожу только цифры, это ограничивает его, но когда я ввожу и букву, и цифру, он все равно проходит, когда не должен.

Kappa123 25.03.2019 17:19

@ Kappa123 Kappa123 Я привел вам пример для букв и цифр и только для букв.

ABC 25.03.2019 17:22

@ Kappa123 дайте мне знать, если возникнут другие проблемы.

ABC 25.03.2019 17:28

На самом деле да, просто быстрый вопрос, у меня есть блок кода того же формата, что и выше, для каждого из полей в формах. В одной из моих форм есть ~ 5 полей. Можно ли как-то сократить его, чтобы мне не приходилось 4 отдельных блока для каждого поля?

Kappa123 25.03.2019 17:30

Используйте regex.test(val)

^[0-9a-zA-Z]*$

^ start

[0-9a-zA-Z] only allow the characters inside [ ]

$ end * as many characters as it contains

function ValidateActInsert() {
  var regex = /^[0-9a-zA-Z ]*$/;
  var val = document.getElementsByTagName('input')[0].value;
  if (!regex.test(val)){
    alert("false");
  }else{
    alert("true");
  }
  return false;
}
<form name = "actorInsert" align = "center" action = "actorInserting.php" onSubmit = "return ValidateActInsert()">
    Actor name:<br>
    <input type = "text" name = "actInsert">
    <br>
    <input type = "submit" value = "Insert">
</form>

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