Ваше текущее регулярное выражение соответствует одной точке, но также соответствует пустой строке, поскольку все части являются необязательными из-за {0,13}
и )?
Если вы не хотите сопоставлять пустую строку,Вы можете использовать чередование , соответствующее 1-13 цифрам, за которым следует необязательная часть, которая соответствует точке и 1-2 цифрам, или |
соответствует только точке, за которой следуют 1-2 цифры.
Чтобы убедиться, что цифры не начинаются с 2 или более нулей, вы можете использовать отрицательный прогноз, чтобы утверждать, что это не так.
^(?:(?!0{2,})\d{1,13}(?:\.\d{1,2})?|\.\d{1,2})$
См. Демонстрационную версию regex
^
Начало строки (?:
Группа без захвата (?!0{2,})
Отрицательный взгляд в будущее, чтобы убедиться, что следующее не 2или больше нулей \d{1,13}(?:\.\d{1,2})?
Совпадение 1-13 цифр с необязательной деталью, которая соответствует точке и 1-2 цифрам |
Или \.\d{1,2})
Совпадениеточка и 1-2 цифры $
Конец строки
Редактировать: Как указано @PushpeshKumarRajwanshi, если оно также подходит для совпадения с точкой в концеВы можете добавить третье чередование |\d+\.
, соответствующее 1+ цифрам, за которым следует точка:
^(?!0{2,})(?:\d{1,13}(?:\.\d{1,2})?|\.\d{1,2}|\d+\.)$
См. обновленную демонстрационную версию Regex