Буквенно-цифровой, тире и подчеркивание, но не регулярное выражение пробелов

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

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

Однако приведенный ниже код позволяет использовать пробелы.

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

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

Ответ 1

Однако приведенный ниже код позволяет использовать пробелы.

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Попробуй это

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

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

Ответ 7

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

"^([a-zA-Z])[a-zA-Z0-9-_]*$"