Регулярное выражение для соответствия сумм в долларах - PullRequest
6 голосов
/ 07 июля 2010

Может ли кто-нибудь предоставить мне регулярное выражение для следующих шаблонов?

$ 1234

$ 31234.3

$ 1234.56

$ 123456.78

$.99

Мое требование: цифры до десятичной точки не должны превышать 6, а после десятичной точки не должны превышать 2 цифры.Пожалуйста, помогите мне.Заранее спасибо ..

Ответы [ 4 ]

9 голосов
/ 07 июля 2010
^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$

(?=.*\d) гарантирует, что в строке есть хотя бы одна цифра.Без этого регулярное выражение ^\$\d{0,6}(\.\d{1,2})?$ совпадало бы со строкой $.

Кстати, просмотр не должен быть таким длинным;подойдет даже простой (?=.), поскольку регулярное выражение гарантирует, что последующие символы действительно допустимы.Таким образом, его можно упростить до

^\$(?=.)\d{0,6}(\.\d{1,2})?$
4 голосов
/ 07 июля 2010
^\$[0-9]{0,6}(\.[0-9]{1,2})?$
2 голосов
/ 07 июля 2010

Шаблон будет:

^\$\d{0,6}(\.\d{0,2})?$

Это не подтверждает, что есть какие-либо цифры, поэтому "$." является действительным совпадением и действительным результатом с учетом исходных требований спрашивающего.

Объяснить:

^ означает совпадение только в том случае, если перед искомой строкой ничего нет, т. Е. В этом примере произойдет сбой «$ 123,45», поскольку $ (соответствует \$) не сразу после начала строки.

\$ соответствует символу $, использование обратной косой черты () называется экранированием и используется для того, чтобы позволить вам сопоставить зарезервированные символы (что означает что-то в контексте регулярного выражения) в этом случае $, что означает совпадение конец строки, то есть после этой точки нет символов

\d будет соответствовать любому десятичному символу, то есть 0-9

{n,m} будет соответствовать от n до m экземпляров предыдущего элемента, если n равно 0, это фактически означает, что совпадение не является обязательным.

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

(...) приносит регулярное выражение, содержащееся внутри, как группа, есть и другие последствия, но я оставлю это вам для изучения. В данном случае он используется только для следующего символа в регулярном выражении

.

? будет соответствовать 0 или 1 предыдущего элемента (в этом случае группа, которая ищет десятичную точку и до 2 десятичных знаков, поэтому мы ожидаем, что не будет десятичной точки с завершающими символами (0 вхождений) или десятичная точка, содержащая до 2 десятичных знаков (1 вхождение))

$ соответствует концу строки, после этой точки в строке не может быть символов.

1 голос
/ 07 июля 2010
/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...