Буквенно-цифровые символы, дефис и подчеркивание, но без пробелов, проверка регулярного выражения 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
Чистая спекуляция. В остальном выражение выглядело нормально и в любом случае не должно совпадать с пробелами, но я просто выбросил его. Вероятно, это должен был быть комментарий, а не ответ.
Дэвид Феллс
1

Попробуй это

"[A-Za-z0-9_-]+"

Должны быть разрешены подчеркивания и дефисы

Акаш Йеллаппа
источник
Ваше решение мне помогло. Благодарность!
Saiyan Prince
0

попробуйте этот, у меня он работает нормально.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Сантош Шинде
источник