Проблема: Я пытаюсь добиться следующих результатов для тестовых случаев, используя шаблон Regex для текста типа ввода html.
Стремление соответствовать следующим критериям:
Только числовые — не допускаются буквы или специальные символы.
Без пробелов между цифрами
две цифры после запятой разрешены
Не может быть нулем (0)
1-я цифра ограничения не может быть равна нулю (например: 01200)
testPattern: RegExp = /(?=.*?\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$/;
Ожидаемые результаты:
ТИА



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете утверждать, что не начинается с нуля, за которым следуют только цифры, или только точки, запятые и нули до конца строки.
^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$
Объяснение
^ Начало строки(?! Негативный прогноз
[0,.]*$ Сопоставьте необязательные нули , или . с концом строки| Или0\d*$ Сопоставьте 0 и необязательные цифры до конца строки) Закрыть вперед\d{1,3} Сопоставьте 1-3 цифры(?:,\d{3})* При желании повторите совпадение , и 3 цифры(?:\.\d{1,2})? Необязательно совпадайте . и 1-2 цифры$ Конец строкиДемонстрация регулярных выражений
const regex = /^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$/;
[
"0",
"012",
"0.00",
"0.0",
"0.",
"00122",
"0.12",
"0.01",
"1,234.00",
"1.00",
"123,456",
"1.23"
].forEach(s => console.info(`${s} --> ${regex.test(s)}`));
Вы можете использовать regexr.com для изолирования регулярных выражений для тестирования.