Шаблон будет:
^\$\d{0,6}(\.\d{0,2})?$
Это не подтверждает, что есть какие-либо цифры, поэтому "$." является действительным совпадением и действительным результатом с учетом исходных требований спрашивающего.
Объяснить:
^
означает совпадение только в том случае, если перед искомой строкой ничего нет, т. Е. В этом примере произойдет сбой «$ 123,45», поскольку $ (соответствует \$
) не сразу после начала строки.
\$
соответствует символу $, использование обратной косой черты () называется экранированием и используется для того, чтобы позволить вам сопоставить зарезервированные символы (что означает что-то в контексте регулярного выражения) в этом случае $, что означает совпадение конец строки, то есть после этой точки нет символов
\d
будет соответствовать любому десятичному символу, то есть 0-9
{n,m}
будет соответствовать от n до m экземпляров предыдущего элемента, если n равно 0, это фактически означает, что совпадение не является обязательным.
\.
будет соответствовать десятичной запятой, он экранируется как. является зарезервированным символом в регулярном выражении, означающем совпадение с любым символом
(...)
приносит регулярное выражение, содержащееся внутри, как группа, есть и другие последствия, но я оставлю это вам для изучения. В данном случае он используется только для следующего символа в регулярном выражении
.
?
будет соответствовать 0 или 1 предыдущего элемента (в этом случае группа, которая ищет десятичную точку и до 2 десятичных знаков, поэтому мы ожидаем, что не будет десятичной точки с завершающими символами (0 вхождений) или десятичная точка, содержащая до 2 десятичных знаков (1 вхождение))
$
соответствует концу строки, после этой точки в строке не может быть символов.