Zanim użyjesz wyrażeń regularnych do weryfikacji liczb, zastanów się najpierw, co zrobić ze znakami o pełnej szerokości.
Liczba `AB-1234` wygląda prosto, ale rzeczywiste dane wejściowe mogą zawierać przedrostki, końcowe znaki nowej linii lub znaki o pełnej szerokości. Po prostu napisz zwykłą regułę, a następnie odpuść, gdy zobaczysz „dopasowanie pomyślnie”. Łatwo pomylić trafienie podłańcucha z całym polem zgodnym z protokołem.
Podczas zapisywania zwykłego numeru czeku dane wejściowe mogą zawierać przedrostki, końcowe znaki nowej linii lub znaki o pełnej szerokości. Jeśli zobaczysz tylko „dopasowanie pomyślnie"i pozwolisz mu przejść, łatwo jest uznać trafienie podłańcucha za całe pole zgodne z protokołem. Ten artykuł jest odpowiedni dla programistów, którzy muszą zweryfikować numery, takie jakAB-1234, a także tych, którzy chronią identyfikatory podczas tłumaczenia dokumentów lub przetwarzania danych. Po przeczytaniu będziesz w stanie rozróżnić sprawdzanie formatu od weryfikacji całego ciągu i ustawić jasne strategie przetwarzania dla sytuacji pełnej szerokości, nowej linii, wielkości liter itp.
W przykładach w tym artykule wykorzystano próbki syntetyczne, a kod został sprawdzony w izolowanym środowisku, ale nie gwarantuje to wszystkich rzeczywistych plików lub efektów produktu. Przed przystąpieniem do przetwarzania ważnych dokumentów prosimy o zachowanie oryginałów i zapoznanie się z nimi zgodnie z granicami i pozycjami akceptacji w tekście.
Używaj wyrażeń regularnych do sprawdzania liczb. Co zrobić ze znakami o pełnej szerokości? Wniosek w jednym zdaniu
Najpierw wyjaśnij zasady: dwie wielkie litery łacińskie, myślnik i cztery cyfry ASCII, o łącznej długości siedmiu znaków. Znaki o pełnej szerokości są bezpośrednio odrzucane, a następnie podejmowana jest decyzja o normalizacji.
| twoja sytuacja | Zalecane praktyki | powód |
|---|---|---|
| Należy potwierdzić, że cały ciąg jest w pełni zgodny z protokołem numeracji | Jednoczesne ograniczenie długości i trybu | Domyślnie pattern schematu JSON wymaga jedynie znalezienia dopasowania w ciągu |
| Dane wejściowe mogą mieć końcowy znak nowej linii lub przedrostek | Określ, czy usunąć zgodnie z wyraźnie wprowadzonym protokołem i nie zwalniaj go automatycznie. | Trafienie podłańcucha nie jest równe całemu polu zgodnie z protokołem |
| Wprowadź litery lub cyfry o pełnej szerokości | Najpierw odrzuć, strategia normalizacji zdefiniowana osobno | Odrzucenie jest łatwiejsze do rozwiązania niż automatyczna konwersja |
| Każdy z różnych modułów przetwarza połowę | Ujednolicone w przejrzysty zestaw strategii | Zdecentralizowane przetwarzanie utrudni rozwiązywanie problemów |
Długość i tryb powinny być ograniczone oddzielnie
pattern w schemacie JSON zwykle wskazuje, że wyrażenie regularne może znaleźć dopasowanie w ciągu i nie oznacza dopasowania całego ciągu. W tym artykule wymagane są dwie wielkie litery łacińskie, myślnik i cztery cyfry ASCII, co daje łączną długość siedmiu znaków. Jednoczesne ustawienie długości i trybu może wyjaśnić zakres tego konkretnego protokołu.
Regularne implementacje różnią się w zależności od języka, zwłaszcza kotwic, klas znaków Unicode i ucieczki. Nie deklaruj bezpośrednio wyrażenia specyficznego dla języka, które ma być obsługiwane przez wszystkie implementacje schematu JSON.
Przetestuj z podobnymi kontrprzykładami
from jsonschema import Draft202012Validator
schema = {"type": "string", "minLength": 7, "maxLength": 7,
"pattern": "[A-Z]{2}-[0-9]{4}"}
validator = Draft202012Validator(schema)
valid = lambda x: not list(validator.iter_errors(x))
assert valid("AB-1234")
assert not valid("prefix-AB-1234")
assert not valid("AB-1234\n")
assert not valid("AB-1234")
assert not valid("AB-1234")
assert not valid("ab-1234")
Ta reguła odrzuca znaki o pełnej szerokości zamiast ich automatycznej normalizacji. Inny system może zdecydować się na normalizację, a następnie zweryfikować, ale powinien zachować zarówno oryginalną wartość, jak i zapis konwersji. Obie metody są przejrzystymi strategiami, które są łatwiejsze do rozwiązania niż wykonywanie połowy z nich w różnych modułach.
To, że nie jest zgodny z formatem, nie oznacza, że można go dowolnie modyfikować.
| Wchodzić | Wynik tego przykładu | Opcjonalne dalsze działania |
|---|---|---|
| AB-1234 | przechodzić | Sprawdź jeszcze raz czy ten numer istnieje w firmie |
| z końcowym znakiem nowej linii | odrzucić | Określ, czy usunąć zgodnie z jawnym protokołem wejściowym |
| Alfanumeryczny o pełnej szerokości | odrzucić | Strategie normalizacji powinny być definiowane osobno |
| Niedopasowanie obudowy | Odrzucenie | Nie pisz automatycznie wielkimi literami według nieznanych zasad |
Formatowanie to dopiero pierwsza kontrola
Regex nie może udowodnić, że numer rzeczywiście istnieje, ani że należy do obecnego klienta lub odpowiadającego mu dokumentu. Po rozpoznaniu O przez OCR jako 0, ciąg może nadal spełniać pewien ogólny wzór. Pola wysokiego ryzyka muszą weryfikować lokalizacje źródeł i dane biznesowe; wyniki kontroli formatu nie powinny być traktowane jako "poprawnie wyodrębnione".
Traktuj identyfikatory jako chronioną treść podczas tłumaczenia
W procesach tłumaczenia dokumentów numeracja zwykle musi pozostać bez zmian. Podczas oceny wyjścia OmniDoc (wpis produktu) możesz użyć tego typu kontraktu, aby sprawdzić, czy identyfikator był pełnowymiarowy, zmieniony przez wielka literę lub brakujące znaki, a następnie wrócić do oryginalnego tekstu do potwierdzenia. Zasady inspekcji opisane w tym artykule są częścią Twojej umowy o dostawie, a nie wewnętrznych implementacji platformy.
Źródła: Schemat ciągu schematu JSON
📊 Porównanie rdzenia
| Strategia obsługi | Metoda | Kluczowe punkty zastosowania |
|---|---|---|
| Odmówić na pełnej szerokości | Przy wprowadzaniu znaków o pełnej szerokości jest to bezpośrednio oceniane jako odrzucone | Zasady są proste i łatwe do sprawdzenia |
| Weryfikacja znormalizowana | Najpierw przekonwertuj na półszerokość przed weryfikacją | Należy zachować zarówno wartość oryginalną, jak i rekord konwersji |
| Podziel moduł na pół i po połowę | Każdy moduł obsługuje własne, specyficzne reguły | Nie zaleca się, ponieważ trudno jest przeprowadzać inspekcje zintegrowane |
🎯 Która metoda ci odpowiada?
Jeśli musisz dokładnie sprawdzić numer
Ustaw zarówno długość, jak i tryb, a także potwierdź punkty kotwiczenia i zachowania klas znaków w regexie w docelowej implementacji.
Jeśli Twoje wejście może zawierać znaki o pełnej szerokości,
Najpierw wybierz strategię odrzucić lub znormalizować i określić ją w dokumentacji.
Jeśli pracujesz ze skanami lub wynikami OCR
Po zatwierdzeniu formatu nadal musisz wrócić do lokalizacji źródłowej w celu weryfikacji, a pola wysokiego ryzyka muszą być weryfikowane przez firmę.
❓ Najczęściej zadawane pytania (FAQ)
1. Czy pattern w JSON Schema wymaga pełnego dopasowania ciągów znaków?
To nie jest domyślny scenariusz; zwykle oznacza to, że w ciągu można znaleźć dopasowania, więc potrzebne są ograniczenia długości, aby ograniczyć całkowity zakres.
2. Czy liczby z przerwaniem linii i ogonkiem powinny być po prostu usunięte?
Automatyczne zwolnienie nie powinno być dozwolone; usunięcie powinno być decydowane zgodnie z protokołem jasnego wprowadzania.
3. Czy znaki pełnowymiarowe powinny być odrzucane, czy normalizowane?
Obie strategie są jasne. W przykładzie w tym artykule wybierz odrzucenie; inny system może normalizować, ale zachować oryginalną wartość i rekord konwersji.
4. Czy zdanie testu formatu oznacza poprawne numerowanie?
Nie. Regex może jedynie sprawdzić format i nie może udowodnić, że numer rzeczywiście istnieje lub należy do aktualnego klienta i dokumentu.
📝 Podsumowanie
Weryfikacja liczb najpierw rozróżnia sprawdzenie formatowania od sprawdzania całego ciągu znaków, a następnie ustawia zunifikowane strategie dla formatowania na pełną szerokość, podziały liniek i wielkie litery. Po zatwierdzeniu formatu nadal musisz wrócić do źródła i danych biznesowych w celu weryfikacji.
Doświadczenie teraz: Prześlij dokument, aby zacząć tłumaczyć, zachowując oryginalne formatowanie


