#regex #validation #matching
#регулярное выражение #проверка #соответствие
Вопрос:
Я пытаюсь проверить десятичное число из 13 цифр до и 4 цифр после точки, исключая запятую, т. е. запятая не должна учитываться как цифра.
Допустимые Случаи
1,234,567,890,123.1234
1234567890123.1234
123456789012.1234
1234567890123.123
12345.123
1.2
0
В допустимых случаях
12345abc.23 // string or special characters not allowed
1,234,567,890,1231.1234
1,234,567,890,123.12341
12345678901231.1234
1234567890123.12341
Текущее Регулярное выражение
^[0-9]{1,13}(.[0-9]{0,4})?$
В настоящее время Regex
запятая считается цифрой.
Любая помощь была бы отличной.
Ответ №1:
Вы могли бы использовать отрицательный прогноз, чтобы утверждать, что то, что находится непосредственно справа, не является 14-кратной цифрой перед сопоставлением с точкой:
^(?!(?:[^.sd]*d){14})-?d (?:,d{1,3})*(?:.d{1,4})?$
Объяснение
^
Начало строки-?
Необязательный дефис(?!
Отрицательный прогноз, утверждение, что следующее не(?:[^.sd]*d){14}
Не используйте цифру, символ пробела или точку 14 раз
)
Закройте предварительный просмотрd
Сопоставьте 1 цифр(?:,d{1,3})*
Сопоставьте запятую, 1-3 цифры и повторите 0 раз (или используйтеd
)(?:.d{1,3})?
Необязательная часть, сопоставьте точку и 1-4 цифры$
Конец строки
Комментарии:
1. Спасибо, отлично работает для 10 цифр до и 3 цифр после точки, но я изменил для проверки 13 цифр до и 4 цифр после точки, как показано ниже, но не работает для ввода
9,999,999,999,999.1234
. ?2. @stom Вы можете расширить последний квантификатор до
{1,4}
типа^-?(?!(?:[^DS.]*d){11})d (?:,d{3})*(?:.d{1,4})?$
3. Изменить на
^-?(?!([^DS.]*d){14})d (?:,d{4})*(?:.d{1,4})?$
, не работает, почему?4. Теперь я хочу проверить 13 цифр до и 4 цифры после точки. т. е. это допустимо:
9,999,999,999,999.1234
Должен ли я обновить вопрос?5. Отлично, это сработало, большое вам спасибо, ценю. 🙂
Ответ №2:
Вы могли бы просто указать необязательное количество, например
^[0-9]{0,1}([,])?[0-9]{0,3}([,])?[0-9]{0,3}([,])?[0-9]{1,3}(.[0-9]{0,3})?$