О шаблоне, который вы пробовали
Обратите внимание, что {1}
вам не нужен. Класс символов [0-9km]
соответствует 1 из char k
или m
или di git 0-9. Таким образом, возможные цифры для сопоставления могут быть 0-3 вместо 0-2.
Использование квантификатора *
для группы позволяет также сопоставить 400.25.22.22.22k
Вы можете использовать этот шаблон для проверки примеров. [0-9]+
в начале шаблона гарантирует, что должен быть хотя бы один di git.
Если вы хотите разрешить 500.
, вы можете использовать:
^[0-9]+(?:(?:\.[0-9]{1,2})?[km]?|\.)$
Пояснение
^
Начало строки [0-9]+
Соответствие 1+ цифр (?:
Без захвата группа (?:\.[0-9]{1,2})?
Сопоставьте необязательную десятичную часть с 2 цифрами [km]?
Сопоставьте необязательно k
или m
|
Или \.
Соответствует одной точке
)$
Конец строки
Демонстрация регулярных выражений
let pattern = /^[0-9]+(?:(?:\.[0-9]{1,2})?[km]?|\.)$/;
[
"400k",
"400.2k",
"4m",
"500000",
"500.",
"300.k",
"4.2.k",
".3k",
"4...k",
].forEach(s => console.log(s + " --> " + pattern.test(s)));
Другой вариант - сопоставить точку, только если за ней не следует k
или m
^[0-9]+(?:\.(?![km]))?\d*[km]?$
Регулярное выражение