Кто-либо мог предоставить мне регулярное выражение для следующих шаблонов?
1 234$
31 234,3$
1 234,56$
123 456,78$
.99$
Мое требование является цифрами, прежде чем десятичное число не должно будет превышать 6 и после десятичной точки, это не должно превышать 2 цифры.Пожалуйста, помогите мне.Заранее спасибо..
^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$
(?=.*\d)
гарантирует, что в строке есть хотя бы одна цифра. Без этого, regex ^\$\d{0,6}(\.\d{1,2})?$
будет соответствовать строке $
.
Кстати, заголовок не обязательно должен быть таким длинным; подойдет даже простой (?=.)
, так как регекс проверяет, что последующие символы действительно допустимы. Таким образом, его можно упростить до
^\$(?=.)\d{0,6}(\.\d{1,2})?$
Шаблон будет выглядеть следующим образом:
^\$\d{0,6}(\.\d{0,2})?$
Это не подтверждает, что есть какие-либо цифры, такие как «$». является действительным совпадением и действительным результатом с учетом исходных требований автора.
Для объяснения:
^
означает совпадение только в том случае, если перед искомой строкой ничего нет, то есть «123,45 доллара США» в этом примере не сработает, поскольку $ (соответствует \ $
) находится не сразу после начала строки.
\ $
соответствует символу $, использование обратной косой черты () называется экранированием и используется, чтобы позволить вам сопоставлять зарезервированные символы (которые означают что-то в контексте регулярного выражения) в этом случае $ which означает соответствие концу строки, т.е. после этой точки нет символов
\ d
будет соответствовать любому десятичному символу, т.е. 0-9
{n, m}
будет соответствовать от n до m экземпляров предыдущего элемента, если n равно 0, то это фактически означает, что совпадение не является обязательным.
\.
будет соответствовать десятичной запятой, она будет экранирована как. является зарезервированным символом в регулярном выражении, означающим соответствие любому символу
(...)
объединяет содержащееся внутри регулярное выражение как группу, есть и другие последствия, но я оставлю это вам для изучения.В этом случае он используется исключительно в пользу следующего символа в регулярном выражении
?
будет соответствовать 0 или 1 предыдущего элемента (в данном случае группа, которая ищет десятичную точку и до 2 десятичных знаков). символов, поэтому мы ожидаем, что не будет десятичной точки с завершающими символами (0 вхождений) или десятичной точки с двумя десятичными знаками (1 вхождение))
$
соответствует концу строки, может быть после этой точки в строке нет символов.
/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/