Проверка наличия специальных символов (, ; .) при проверке формы с помощью JavaScript

Я попытался вставить этот фрагмент кода (который я нашел на веб-сайте) в свой (рабочий) скрипт проверки:

if (register.username.match(/\W/)) {
    alert('You have special characters on username field.');
    return false;
}

Это ничего не сделало, а также мешало работе всего скрипта.

Это html-форма (не вся):

<form name="register" method="POST" action="registar.php" onsubmit="return validateForm();">
    <ul class="left-form">
        <h2>Nova conta:</h2>
        <li>
            <input type="text" name="username" placeholder="Username" required/>
            <div class="clear"> </div>
        </li>
        <li>
            <input type="text" name="email" placeholder="Email" required/>
            <div class="clear"> </div>
        </li>
        <li>
            <input type="password" name="pass" placeholder="Password" required/>
            <div class="clear"> </div>
        </li>
        <li>
            <input type="password" name="pass_confirm" placeholder="Confirmar a password" required/>
            <div class="clear"> </div>
        </li>
        <input type="submit" value="Registar">
        <div class="clear"> </div>
    </ul>
</form>

И это мой код Javscript (без проверки специальных символов):

function validateForm() {
    if (register.username.value.length <= 2) {
        alert("O username escolhido é demasiado curto.");
        return false;
    }
    if (register.username.value.length > 20) {
        alert("O username escolhido é demasiado longo.");
        return false;
    }
    var x = register.email.value;
    var atpos = x.indexOf("@");
    var dotpos = x.lastIndexOf(".");
    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
        alert("O email inserido parece ser inválido.");
        return false;
    }
    if (register.username.value == register.pass.value) {
        alert("Por questões de segurança, pedimos que use uma password diferente do seu nome de utilizador.");
        return false;
    }
    if ((register.pass.value.length < 6) || (register.pass.value.length > 20)) {
        alert("Certifique-se que a sua password tem entre 6 e 20 letras.");
        return false;
    }
    if (register.pass.value != register.pass_confirm.value) {
        alert("As passwords não condizem.");
        return false;
    }
    return true;
}

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

Может ли кто-нибудь написать фрагмент кода, который проверяет наличие специальных символов (! , . + * и т. д.), или сказать мне, что не так с кодом, который я использовал?


person Bruno Dayz    schedule 21.01.2015    source источник
comment
Пожалуйста, покажите HTML формы и поля имени.   -  person Niet the Dark Absol    schedule 21.01.2015
comment
А что, если в моем имени есть эти символы? ==›   -  person T.J. Crowder    schedule 21.01.2015
comment
Просто взять случайный сценарий, который вы найдете на веб-сайте, и применить его к своему коду, не понимая, что он делает, — это не успешный путь к совершенству в разработке. Потратьте некоторое время на изучение языка и среды, в которой вы работаете, и вы сможете вносить подобные изменения во сне. В этом случае вы, вероятно, ищете регулярные выражения .   -  person T.J. Crowder    schedule 21.01.2015
comment
@T.J.Crowder, спасибо за эту страницу! Обязательно прочитаю и изучу.   -  person Bruno Dayz    schedule 21.01.2015
comment
Обратите внимание, что я студент, и все это для меня в новинку. Вот почему я пришел за помощью и советом на этот сайт, так как здесь были ответы на большинство моих вопросов.   -  person Bruno Dayz    schedule 21.01.2015
comment
возможный дубликат проверки специальных символов с использованием JavaScript   -  person Farid Nouri Neshat    schedule 21.01.2015


Ответы (1)


Вы, вероятно, должны изменить код на это:

if (register.username.value.match(/\W/)) {
   alert('You have special characters on username field.');
   return false;
}

Какая разница? Ну, если вы поняли, я добавил .value посередине. Потому что register.username будет ссылаться на элемент ввода имени пользователя, а у него нет метода match. Нам нужно проверить введенный в него текст. Проверив ссылку на элемент ввода, вы поймете, что мы используем его value свойство, которое возвращает введенный текст. Итак, register.username.value — это текст, введенный пользователем, и поскольку это строка, мы можем использовать .match метод на нем.

Теперь вы можете передать любое регулярное выражение в метод match, который удовлетворит ваши потребности. Ознакомьтесь также с руководством по регулярному выражению.

Также всегда проверяйте наличие ошибок, отображаемых в консоли разработчика.

person Farid Nouri Neshat    schedule 21.01.2015
comment
Спасибо! Честно говоря, с моей стороны было большой ошибкой не заметить пропажу .value. - person Bruno Dayz; 21.01.2015