#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
Я проверил все ваши случаи, и это работает нормально.