Буквенно-цифровой, тире и подчеркивание, но не регулярное выражение пробелов
Попытка проверить ввод на регулярное выражение.
Поле должно содержать только буквенно-цифровые символы, тире и символы подчеркивания и НЕ разрешать пробелы.
Однако приведенный ниже код позволяет использовать пробелы.
Что мне не хватает?
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-_]*$"