Я ищу регулярное выражение для разрешения буквенно-цифровых символов -, _ или пробелов в JavaScript/jQuery. Я попробовал Google, но не смог найти это.
Кто-нибудь может мне помочь с этим?
Заранее спасибо.
Я ищу регулярное выражение для разрешения буквенно-цифровых символов -, _ или пробелов в JavaScript/jQuery. Я попробовал Google, но не смог найти это.
Кто-нибудь может мне помочь с этим?
Заранее спасибо.
Попробуйте это регулярное выражение:
/^[a-z\d\-_\s]+$/i
Наборы символов помогут здесь тонну. Вы хотите создать соответствующий набор для символов, которые вы хотите проверить:
\w
, что совпадает с [A-Za-z0-9_]
в JavaScript (другие языки могут отличаться).-
и пробелы, которые можно объединить в соответствующий набор, такой как [\w\- ]
. Однако вам может потребоваться использовать \s
вместо просто символа пробела (\s
также соответствует вкладкам и другим формам пробелов)
-
как \-
, так что механизм regex не путает его с диапазоном символов, например A-Z
^
и $
Полное регулярное выражение, которое вы, вероятно, ищете:
/^[\w\-\s]+$/
(Обратите внимание, что +
указывает, что для него должен быть хотя бы один символ, вместо этого используйте *
если строка нулевой длины также нормально)
Наконец, http://www.regular-expressions.info/ является замечательной ссылкой
Бонусные баллы: Это регулярное выражение не соответствует альфам, отличным от ASCII. К сожалению, движок регулярных выражений в большинстве браузеров не поддерживает именованные наборы символов но для этого есть несколько библиотек.
Для языков/платформ, поддерживающих именованные наборы символов, вы можете использовать /^[\p{Letter}\d\_\-\s]+$/
/^[-\w\s]+$/
\w соответствует буквам, цифрам и символам подчеркивания
\s соответствует пробелам, вкладкам и разрывам строки
- соответствует дефис (если у вас есть дефис в примере набора символов [a-z], обязательно поместите дефис в начале так же [-a-z])
var string = 'test- _ 0Test';
string.match(/^[-_ a-zA-Z0-9]+$/)
var regex = new RegExp("^[A-Za-z0-9? ,_-]+$");
var key = String.fromCharCode(event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
event.preventDefault();
return false;
}
в regExp [A-Za-z0-9?spaceHere,_-]
после знака вопроса '?' имеется буквальное пространство. Это соответствует пробелу. Другие, такие как /^[-\w\s]+$/
и /^[a-z\d\-_\s]+$/i
, не работали для меня.
Для меня я хотел регулярное выражение, которое поддерживает строки как предыдущие. По сути, мотивом является поддержка почтового формата в некоторых зарубежных странах, так как он должен быть буквенно-цифровым с пробелами.
В итоге я написал пользовательское регулярное выражение, как показано ниже.
/^([a-z]+[\s]*[0-9]+[\s]*)+$/i
Здесь я указал * in [\s]*
как не обязательно иметь пробел. В моем случае почтовый индекс может содержать или не содержать пробел.
Попробуйте это регулярное выражение
* Обновлено регулярное выражение
/^[a-z0-9]+([-_\s]{1}[a-z0-9]+)*$/i
Это позволит только один пробел или - или _ между текстом
Ex: this-some abc123_regex
Чтобы узнать: https://regexr.com
* Примечание: я обновил регулярное выражение на основе вопроса Toto