Prima di utilizzare le espressioni regolari per verificare i numeri, pensa innanzitutto a cosa fare con i caratteri a larghezza intera.
Il numero `AB-1234` sembra semplice, ma l'input reale può avere prefissi, ritorni a capo finali o caratteri a larghezza intera. Scrivi semplicemente una regola regolare e poi lasciala andare quando vedi "corrispondenza riuscita". È facile confondere la sottostringa colpita con l'intero campo conforme al protocollo.
Quando si scrive un numero di assegno regolare, l'input può contenere prefissi, ritorni a capo finali o caratteri a larghezza intera. Se vedi solo "corrispondenza riuscita" e lo lasci andare, è facile considerare un successo di sottostringa come l'intero campo conforme al protocollo. Questo articolo è adatto agli sviluppatori che necessitano di verificare numeri come AB-1234, nonché a coloro che proteggono gli identificatori durante la traduzione di documenti o l'elaborazione dei dati. Dopo la lettura, sarai in grado di distinguere tra controllo del formato e verifica dell'intera stringa e impostare strategie di elaborazione chiare per situazioni a larghezza intera, nuova riga, maiuscole e minuscole, ecc.
Gli esempi in questo articolo utilizzano campioni sintetici e il codice è stato controllato a campione in un ambiente isolato, ma ciò non rappresenta una garanzia di tutti i file reali o degli effetti del prodotto. Prima di elaborare documenti importanti, conservare gli originali e rivederli rispettando i limiti e gli elementi di accettazione nel testo.
Utilizza le espressioni regolari per verificare i numeri, cosa fare con i caratteri a larghezza intera? Conclusione di una frase
Innanzitutto chiariamo le regole: due lettere latine maiuscole, un trattino e quattro cifre ASCII, per una lunghezza totale di sette caratteri. I caratteri a larghezza intera vengono rifiutati direttamente e quindi si decide se normalizzarli.
| la tua situazione | Pratiche consigliate | motivo |
|---|---|---|
| È necessario confermare che l'intera stringa sia pienamente conforme al protocollo di numerazione | Vincola lunghezza e modalità contemporaneamente | pattern dello schema JSON per impostazione predefinita richiede solo che sia possibile trovare una corrispondenza nella stringa |
| L'input può avere un fine riga o un prefisso finale | Determinare se rimuovere secondo il protocollo chiaramente inserito e non rilasciarlo automaticamente. | Il risultato della sottostringa non è uguale all'intero campo conforme al protocollo |
| Inserisci lettere o numeri a larghezza intera | Rifiutare prima, strategia di normalizzazione definita separatamente | Il rifiuto è più semplice da risolvere rispetto alla conversione automatica |
| Diversi moduli elaborano ciascuno la metà del file | Unificato in un chiaro insieme di strategie | L’elaborazione decentralizzata renderà più difficile la risoluzione dei problemi |
La lunghezza e la modalità devono essere vincolate separatamente
pattern nello schema JSON di solito indica che l'espressione regolare può trovare una corrispondenza nella stringa e non implica la corrispondenza dell'intera stringa. Questo articolo richiede due lettere latine maiuscole, un trattino e quattro cifre ASCII per una lunghezza totale di sette caratteri. L'impostazione simultanea della lunghezza e della modalità può chiarire l'ambito di questo specifico protocollo.
Le implementazioni regolari variano tra le lingue, in particolare gli ancoraggi, le classi di caratteri Unicode e l'escape. Non dichiarare direttamente un'espressione specifica della lingua affinché sia supportata da tutte le implementazioni dello schema JSON.
Prova con controesempi simili
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")
Questa regola sceglie di rifiutare i caratteri a larghezza intera invece di normalizzarli automaticamente. Un altro sistema può scegliere di normalizzare e quindi verificare, ma dovrebbe conservare sia il valore originale che il record di conversione. Entrambi i metodi sono strategie chiare, più facili da risolvere rispetto alla metà di esse in moduli diversi.
Solo perché non soddisfa il formato non significa che possa essere modificato a piacimento.
| entrare | Il risultato di questo esempio | Azioni successive facoltative |
|---|---|---|
| AB-1234 | passaggio | Controlla di nuovo se questo numero esiste nell'azienda |
| con fine riga finale | rifiutare | Determinare se rimuovere in base al protocollo di input esplicito |
| Alfanumerico a larghezza intera | rifiutare | Le strategie di normalizzazione dovrebbero essere definite separatamente |
| Mancata corrispondenza del caso | rifiutare | Non utilizzare automaticamente le maiuscole in base a regole sconosciute |
Il formato corretto è solo il primo controllo
L'espressione regolare non può provare che il numero esista effettivamente, né può provare che appartenga al cliente attuale o corrisponda al documento attuale. Dopo che l'OCR ha riconosciuto O come 0, la stringa potrebbe ancora soddisfare un certo schema generale. I campi ad alto rischio devono verificare la posizione di origine e i dati aziendali e i risultati del controllo del formato non possono essere considerati direttamente come "estratti correttamente".
Tratta gli identificatori come contenuto protetto durante la traduzione
Nei flussi di lavoro di traduzione di documenti, spesso è necessario mantenere la numerazione così com'è. Quando si valuta l'output di OmniDoc (portale del prodotto), è possibile utilizzare questo tipo di contratto per verificare se l'identificatore è a larghezza intera, se è stata modificata la distinzione tra maiuscole e minuscole o se mancano caratteri, quindi tornare al testo originale per confermare. Le regole di controllo in questo articolo appartengono al tuo contratto di consegna, non alle istruzioni di implementazione interna della piattaforma.
Riferimenti: Schema di stringa dello schema JSON
📊 Confronto fondamentale
| strategia di elaborazione | pratica | Punti applicabili |
|---|---|---|
| Rifiuta a tutta larghezza | Quando l'input contiene caratteri a larghezza intera, verrà giudicato direttamente come non riuscito. | Le regole sono semplici e facili da risolvere |
| Verifica dopo la normalizzazione | Converti prima a metà larghezza e poi verifica | Sia il valore originale che il record di conversione devono essere conservati |
| Realizza la metà di ogni modulo | Ogni modulo gestisce alcune regole separatamente | Sconsigliato, difficile da controllare uniformemente |
🎯Quale metodo è adatto a te?
Se è necessario verificare rigorosamente il numero
Imposta anche la lunghezza e la modalità e conferma l'ancoraggio dell'espressione regolare e il comportamento della classe di caratteri nell'implementazione di destinazione.
Se il tuo input può contenere caratteri a larghezza intera
Per prima cosa scegli una strategia di rifiuto o normalizzazione e scrivila nella documentazione.
Se stai elaborando scansioni o risultati OCR
Una volta superato il formato, è comunque necessario restituirlo alla posizione di origine per la verifica e i campi ad alto rischio richiedono la verifica aziendale.
❓ Domande frequenti (FAQ)
1. pattern dello schema JSON richiederà la corrispondenza dell'intera stringa?
Questa non è l'impostazione predefinita, in genere significa che è possibile trovare una corrispondenza nella stringa, quindi è necessario utilizzare un vincolo di lunghezza per limitare l'intervallo complessivo.
2. Le interruzioni di riga dovrebbero essere rimosse direttamente dai numeri con interruzioni di riga finali?
Non dovrebbe essere rilasciato automaticamente e la rimozione dovrebbe essere decisa secondo un chiaro protocollo di input.
3. I caratteri a larghezza intera devono essere rifiutati o normalizzati?
Entrambe sono strategie chiare. L'esempio in questo articolo sceglie di rifiutare e un altro sistema può normalizzarsi, ma i valori originali e i record di conversione devono essere conservati.
4. Il controllo formato è stato superato, significa che il numero è corretto?
non può. Le espressioni regolari possono solo verificare il formato, ma non possono provare che il numero esista effettivamente o appartenga al cliente e al documento corrente.
📝 Riepilogo
La verifica del numero distingue innanzitutto il controllo del formato e la verifica dell'intera stringa, quindi imposta una strategia unificata per larghezza intera, interruzioni di riga e maiuscole e minuscole. Una volta superato il formato, devi comunque tornare alla fonte e controllare i dati aziendali.
Provalo subito: carica il documento per iniziare la traduzione, mantenendo il layout originale


