Я пытаюсь добавить проверку формы в свою форму. Мне удалось сделать это для длины символов, цифр, букв, и все они работают нормально, но, похоже, это не работает для специальных символов, таких как @ & * и т. д.
Я попытался следовать примеру из предыдущего вопроса, который создал переменную для всех различных специальных символов, а затем я сделал здесь то же, что и с другими моими проверками, сопоставил ввод поля с переменной со специальными символами, чтобы увидеть, есть ли есть, но он их не обнаруживает.
Это мой 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>
Сам код имеет смысл для меня, и я полагаю, что он будет работать, и я, честно говоря, понятия не имею, почему это не так.
@SterlingArcher привел ему пример.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы ловили каждый символ.
Давай просто позволим
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», а также недопустимый ввод?
/([6z])\w+/g Я предлагаю использовать regexr.com для проверки значений регулярного выражения. Кроме того, зависит от того, что будет классифицировать недопустимый ввод.
Для этого конкретного поля разрешены только буквы, поэтому, если я ввожу только цифры, это ограничивает его, но когда я ввожу и букву, и цифру, он все равно проходит, когда не должен.
@ Kappa123 Kappa123 Я привел вам пример для букв и цифр и только для букв.
@ Kappa123 дайте мне знать, если возникнут другие проблемы.
На самом деле да, просто быстрый вопрос, у меня есть блок кода того же формата, что и выше, для каждого из полей в формах. В одной из моих форм есть ~ 5 полей. Можно ли как-то сократить его, чтобы мне не приходилось 4 отдельных блока для каждого поля?
Используйте 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>
Вместо того, чтобы пытаться поймать все возможные специальные символы, попробуйте поймать только буквенно-цифровые символы. Намного легче