#javascript #jquery #regex
#javascript #jquery #регулярное выражение
Вопрос:
У меня есть входные данные, которые я привязываю к keyup ()
При каждом вводе я хочу, чтобы:
- запретить любые символы, которые не являются числом, буквой или тире, и
- замените любые символы верхнего регистра строчными.
Регулярное выражение заставляет мою голову взрываться, любая помощь?
$('.my-input').keyup(function() {
this.value = this.value.replace(/[^0-9a-z-]/g,/[0-9a-z-]/g);
});
Комментарии:
1. Вы уже получили помощь с этой частью регулярных выражений, но не забывайте, что пользователи могут вводить данные в ваш ввод без запуска события keyup, если они делают это с помощью мыши (щелкните правой кнопкой мыши и вставьте, перетащите).
Ответ №1:
this.value = this.value.toLowerCase().replace(/[^0-9a-z-]/g,"");
Комментарии:
1. это не работает, поскольку не допускает использования прописных букв от A до Z.. нужно разрешить им уменьшать конечный результат …. редактировать я тупой .. сначала я вижу ваш toLower 🙂
2. @ Jake — Поскольку я конвертирую в нижний регистр перед заменой, мне не нужно искать верхний регистр в регулярном выражении.
3. да, я заметил уменьшение после моего комментария .. внес в него правку 🙂
Ответ №2:
Регулярное выражение для числа, буквы или тире такое: [-0-9a-z]
(чтобы включить буквенное тире в свой класс символов, укажите его в качестве первого символа; после этого оно считается оператором диапазона).
Попробуйте:
$('.my-input').keyup(function() {this.value = this.value.toLowerCase().replace(/[^-0-9a-z]/g,''); });
Комментарии:
1. Я только что проверил, и javascript менее привередлив, чем java — вы можете использовать буквенное тире в начале или в конце регулярного выражения
Ответ №3:
$('.my-input').keyup(function() {
this.value = this.value.replace(/[^0-9a-zA-Z-]/g, '').toLowerCase();
});
Ответ №4:
Хороший вопрос.. вы почти на месте!
$('.my-input').keyup(function() { this.value = this.value.replace(/[^A-Za-z0-9-]/g,"").toLowerCase();
Регулярное выражение — неподходящий инструмент для перевода в нижний регистр, используйте встроенную функцию. Ваше регулярное выражение было хорошим, но функция replace принимает одно регулярное выражение, и замена представляет собой строку, а не регулярное выражение *.
(* в заменяющих строках есть небольшая магия, но ее недостаточно для нижнего регистра)