blob: ec7f355cfd3753427da2b8cf21a33d5fcd852c22 [file]
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include "formats/pdf/number_validator.h"
#include <cstddef>
#include "absl/strings/string_view.h"
namespace credentio {
bool IsValidRealNumber(absl::string_view s) {
if (s.empty()) return false;
bool seen_decimal = false;
bool seen_e = false;
for (size_t i = 0; i < s.size(); ++i) {
const char c = s[i];
if (c == '+' || c == '-') {
if (i != 0 && s[i - 1] != 'e' && s[i - 1] != 'E') return false;
if (i == s.size() - 1) return false;
} else if (c == '.') {
if (seen_decimal || seen_e) return false;
seen_decimal = true;
} else if (c == 'e' || c == 'E') {
if (seen_e || i == 0 || i == s.size() - 1) return false;
seen_e = true;
} else if (c < '0' || c > '9') {
return false;
}
}
bool has_digit = false;
for (const char c : s) {
if (c >= '0' && c <= '9') {
has_digit = true;
break;
}
}
return has_digit;
}
bool IsValidHexadecimalString(absl::string_view s) {
for (const char c : s) {
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') ||
(c >= 'A' && c <= 'F') || c == ' ' || c == '\t' || c == '\r' ||
c == '\n' || c == '\f' || c == '\0')) {
return false;
}
}
return true;
}
} // namespace credentio