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

$ 1234

$ 31234,3

$ 1234,56

$ 123456,78

$ 0,99

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

6
MAC 7 Июл 2010 в 13:17

4 ответа

Лучший ответ
^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$

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

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

^\$(?=.)\d{0,6}(\.\d{1,2})?$
9
Amarghosh 7 Июл 2010 в 09:24
^\$[0-9]{0,6}(\.[0-9]{1,2})?$
4
Chris 7 Июл 2010 в 10:53

Шаблон будет таким:

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

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

Объяснить:

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

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

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

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

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

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

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

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

2
Lazarus 7 Июл 2010 в 09:51
/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/
1
helle 7 Июл 2010 в 09:27