Регулярное выражение допускает максимум 3 числа и одну точку

#javascript #regex #validation

Вопрос:

я пытаюсь поймать ввод поля с помощью javascript.

мне нужно получить максимум 3 числа и одну точку.

я попробовал это регулярное выражение: [^d{0,3}.{0,1}d{0,3}]

но это не совсем работает, я действительно не могу понять, как извлекать числовые значения глобально, так что на самом деле это максимум 3 числа.

 333   //ok
333   //ok
33.1  //ok
3.33  //ok
3.3.  //not ok
3.333 //not ok
3333. //not ok
3..   //not ok
.     //not ok
 

Надеюсь, кто-нибудь сможет мне здесь намекнуть.

Комментарии:

1. Может ли он начинаться с точки?

Ответ №1:

Для проверки при отправке (окончательной) вы можете использовать

 ^(?=.{3,4}$)d (?:.d )?$
 

Смотрите демонстрацию регулярных выражений. Это соответствует

  • ^ — начало строки
  • (?=.{3,4}$) — для этого требуется, чтобы строка содержала только три или четыре символа
  • d (?:.d )? — одна или несколько цифр, а затем необязательное вхождение a . и одной или нескольких цифр. Поскольку d . и d обязательно должны совпадать хотя бы один раз , минимальный предел в 3 оправдан, и поскольку может быть сопоставлена только одна точка, любая из d них может совпадать с одной или двумя цифрами, но всего три
  • $ — конец веревки.

Для проверки текста ввода в реальном времени вы можете использовать

 ^(?:d{1,3}|d(?:d?.d?|.d{2}))$
 

Смотрите демонстрацию регулярных выражений. Подробные сведения:

  • ^ — начало строки
  • (?: — начало группы:
    • d{1,3} — одна, две или три цифры
  • | — или
    • d — цифра
    • (?:d?.d?|.d{2}) — группа без захвата, соответствующая либо
      • d?.d? — необязательная цифра, а . , а затем необязательная цифра
      • | — или
      • .d{2} . и затем две цифры
  • ) — окончание группы
  • $ — конец веревки.

Комментарии:

1. Большое вам спасибо! Есть ли способ «отрицать» выбор, чтобы были выбраны 3.3 и т. Д. Есть ли простой способ сделать это? Спасибо!

2. @lvollmer Отрицание делается так ^(?!pattern$) . Так, ^(?!(?=.{3,4}$)d (?:.d )?$)

3. Вот так regex101.com/r/1YzFjM/1 ? я думал, что тогда он выберет остальных.

4. @lvollmer Да, так и было. Если вы хотите использовать строки, добавьте .* в конце.

5. как я могу выбрать только x символов строки? так, например, 33381 из 81?

Ответ №2:

Я очень плох в обычном выражении, но придумал что-то подобное ниже. Возможно, есть гораздо более элегантный способ, но….

 ^d{0,3}$|^d{2}[.]d{1}$|^d{1}[.]d{1,2}$
 

Работает максимум для 3 чисел, так что 3 и 33 тоже в порядке

Ответ №3:

Вы также можете сопоставить все 3 варианта в группе без захвата:

 ^(?:d{3}|d.dd|dd.d)$
 

Демонстрация регулярных выражений

Или сначала сопоставьте одну цифру, за которой следуют 2 варианта необязательной точки и 2 цифры, или одну цифру, необязательную точку и одну цифру.:

 ^d(?:.?dd|d.?d)$
 

Демонстрация регулярных выражений

Ответ №4:

Вы можете попробовать вот это:

 (?<!.)bd.?d.?db
 

Я проверил все ваши случаи, и это работает нормально.