Буквено-цифрові, тире та підкреслення, але без пробілів регулярні вирази перевіряють 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 (тобто /abc/.test("abcd")) замість String.search (), якщо вас цікавить лише логічне значення. Вам також потрібно повторити свій клас персонажів, як це пояснив у відповіді Енді Е:

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

8
Насправді, вам слід використовувати RegExp.prototype.testметод, якщо вас цікавить лише логічний вираз.
Andy E,

7

Цей синтаксис трохи коротший, ніж відповіді, розміщені до цього моменту, і досягає того самого результату:

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

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

4

Отримав дурну помилку. Тож розміщуйте тут, якщо комусь це буде корисно

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

№2 застосовується лише в квадратних дужках, тобто [\.-_] - це символ у діапазоні від крапки до підкреслення. Але без квадратних дужок обидва є послідовністю з трьох символів, і вони просто відрізняються в порядку.
заборонити

1

Не уникайте підкреслення. Можливо, це спричиняє якусь хитрість.


1
Чому ти це кажеш? Я знаю, що підкреслення не потрібно уникати, але я ніколи не чув про те, щоб \_спричиняти проблеми в JavaScript чи будь-якому іншому смаку регулярних виразів.
Алан Мур,

1
Чиста спекуляція. Інакше вираз виглядав чудово і ні в якому разі не повинен відповідати пробілам, але я просто викинув його туди. Можливо, це повинен бути коментар, а не відповідь.
Девід Феллс,


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.