Буквенно-цифровые символы, дефис и подчеркивание, но без пробелов, проверка регулярного выражения JavaScript


92

Попытка проверить ввод на соответствие регулярному выражению.

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

Однако в приведенном ниже коде допускаются пробелы.

Что мне не хватает?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
Мне нравится ответ Энди Э. ниже. Кроме того, вы можете проверить gskinner.com/RegExr для быстрого редактирования регулярных выражений. Это ... довольно мило.
pixelbobby

Ответы:


155

Однако в приведенном ниже коде допускаются пробелы.

Нет, это не так. Однако он будет соответствовать только на входе с длиной 1. Для входов с длиной больше или равной 1 вам потребуется +следующий класс символов:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

Обратите внимание, что ни -(в данном случае), ни _необходимость экранирования.


16

Вы не должны использовать String.match, а RegExp.prototype.test (ie /abc/.test("abcd")) вместо String.search (), если вас интересует только логическое значение. Вам также необходимо повторить свой класс персонажа, как объяснено в ответе Энди Э:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
На самом деле вам следует использовать этот RegExp.prototype.testметод, если вас интересуют только логические значения.
Энди Э

7

Этот синтаксис немного более краток, чем ответы, опубликованные к этому моменту, и дает тот же результат:

let regex = /^[\w-]+$/;

1
Подумайте о добавлении примечания, что ваш ответ работает также и для международных символов. Я не уверен в JavaScript, но в bash это работает: `echo" abc-def däf_ghi "| egrep -wo '(\ w | - | _) +'
Иван Огай

4

Получил глупую ошибку. Так что разместите здесь, если кому-то это будет полезно

  1. -\._ - означает дефис, точку и подчеркивание
  2. \.-_ - означает все знаки в диапазоне от точки до подчеркивания

№2 применяется, только если он заключен в квадратные скобки, т.е. [\.-_] - это символ в диапазоне от точки до подчеркивания. Но без квадратных скобок оба представляют собой последовательность из трех символов, и они отличаются только порядком.
erict

1

Не избегайте подчеркивания. Может вызвать неприятные ощущения.


1
Почему ты это сказал? Я знаю, что подчеркивание не нужно экранировать, но я никогда не слышал о \_проблемах в JavaScript или других разновидностях регулярных выражений.
Алан Мур

1
Чистая спекуляция. В остальном выражение выглядело нормально и в любом случае не должно совпадать с пробелами, но я просто выбросил его. Вероятно, это должен был быть комментарий, а не ответ.
Дэвид Феллс


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.