Регулярное выражение заменяет все, кроме чисел и нижнего регистра

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

У меня есть входные данные, которые я привязываю к keyup ()

При каждом вводе я хочу, чтобы:

  1. запретить любые символы, которые не являются числом, буквой или тире, и
  2. замените любые символы верхнего регистра строчными.

Регулярное выражение заставляет мою голову взрываться, любая помощь?

 $('.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 принимает одно регулярное выражение, и замена представляет собой строку, а не регулярное выражение *.

(* в заменяющих строках есть небольшая магия, но ее недостаточно для нижнего регистра)