Сведения о вопросе

LiKIY

04:24, 25th August, 2020

Теги

javascript   regex    

Что я здесь сделал не так? [Javascript Regex]

Просмотров: 442   Ответов: 8

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

Посмотрите на мой код и скажите мне, что я делаю неправильно.

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
<!--
    var name_regex = /^([a-zA-Z0-9_])+/

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus()
            alert("Your display name may only contain letters, numbers and underscores")
            return false
        }
    }
-->
</script>

Очевидно, что он был обрезан, чтобы не включать ничего, не связанного с проблемой, но даже этот фрагмент не работает.



  Сведения об ответе

PROGA

23:40, 22nd August, 2020

Ваш regex

/^([a-zA-Z0-9_])+/

Искать

  1. Начало строки (проверка), за которой следует
  2. 1 или более букв, цифр или подчеркивания (проверьте)

И что бы ни случилось потом, это не имеет значения. Это regex будет соответствовать чему угодно, если оно начинается с буквы, цифры или подчеркивания

Если вы поставите $ в конце, то он будет работать - $ соответствует "концу строки", поэтому единственный способ, которым он может соответствовать, - это если между началом и концом строки есть только цифры, буквы и подчеркивания.

/^([a-zA-Z0-9_])+$/

Во-вторых, я бы предложил использовать document.getElementById('display-name').value вместо document.forms , поскольку он не сломается, если вы переставите HTML, и это более "общепринятый стандарт того, что делать"


  Сведения об ответе

+-*/

06:09, 26th August, 2020

Мое регулярное выражение будет идти по строкам: /^[a-zA-Z0-9_]+$/

edit: я думаю, что это отсутствие конца строки $ , что делает его неудачным.


  Сведения об ответе

SILA

02:56, 15th August, 2020

Под 'not working' я понимаю, что вы имеете в виду, что он пропускает недействительные записи (а не не пропускает действительные записи).

Как сказал @Annan, это, вероятно, связано с отсутствием символа $ в конце выражения, поскольку в настоящее время требуется только один допустимый символ в начале значения, а rest может быть чем угодно.


  Сведения об ответе

lool

18:34, 2nd August, 2020

Что означает "doesn't work"? Отклоняет ли он допустимые отображаемые имена? Принимает ли он недопустимые отображаемые имена? Какие именно?

Per @Annan, оставляя $ заставит регулярное выражение принимать недопустимые отображаемые имена, такие как abc123!@# .

Если код отклоняет допустимые отображаемые имена, это может быть связано с тем, что скобки сопоставляются буквально вместо обозначения группы (я не уверен в соглашении о цитировании в JS).


  Сведения об ответе

$DOLLAR

03:03, 19th August, 2020

Я проверил ваш сценарий и вмешался в javascript. Это похоже на работу:

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
    <!--
    var name_regex = /^([a-zA-Z0-9_])+$/;

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus();
            alert("Your display name may only contain letters, numbers and underscores");
            return false;
        }
    }
    -->
</script>


  Сведения об ответе

P_S_S

12:56, 12th August, 2020

Извините, ребята, я должен был быть более конкретным. Всякий раз, когда я добавлял пробелы, значения все еще принимались. Знак доллара $ сделал свое дело!


  Сведения об ответе

DO__IT

16:49, 27th August, 2020

Более простой способ написать его все равно был бы

var name_regex = /^([a-z0-9_])+$/i;


  Сведения об ответе

prince

10:30, 9th August, 2020

Еще проще:

var name_regex = /^\w+$/;


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться