euredact 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,575 @@
1
+ import { EntityType } from "../../types.js";
2
+ /**
3
+ * Helper to create a PatternDef with sensible defaults.
4
+ */
5
+ function p(entityType, pattern, validator = null, description = "", contextKeywords = [], requiresContext = false) {
6
+ return { entityType, pattern, validator, description, contextKeywords, requiresContext };
7
+ }
8
+ // ---------------------------------------------------------------------------
9
+ // DOB context keywords (reused across SHARED patterns)
10
+ // ---------------------------------------------------------------------------
11
+ const DOB_CONTEXT = [
12
+ "geboren", "geboortedatum", "date de naissance", "né le", "née le",
13
+ "né(e) le", "nee le", "nee(e) le", "date of birth", "DOB",
14
+ "Geburtsdatum", "geboren am", "geboren op", "nascido", "nacido",
15
+ "data di nascita", "nato il", "nata il", "geb.", "geb.datum", "geb ",
16
+ "birth date", "birthday", "naissance", "geboorte", "geburtstag",
17
+ ];
18
+ const DOB_ISO_CONTEXT = [
19
+ "geboren", "geboortedatum", "date de naissance", "né le", "née le",
20
+ "né(e) le", "nee le", "date of birth", "DOB", "Geburtsdatum",
21
+ "geboren am", "geboren op", "geb.", "birth date", "birthday",
22
+ "naissance", "geboorte",
23
+ ];
24
+ const DATE_OF_DEATH_CONTEXT = [
25
+ "overleden", "overlijdensdatum", "date de décès", "décédé le",
26
+ "date of death", "Sterbedatum", "verstorben am", "gestorven",
27
+ "death date", "died on", "mort le", "décès",
28
+ ];
29
+ // ---------------------------------------------------------------------------
30
+ // Country configurations
31
+ // ---------------------------------------------------------------------------
32
+ const SHARED = {
33
+ code: "SHARED",
34
+ name: "Shared EU Patterns",
35
+ patterns: [
36
+ p(EntityType.EMAIL, String.raw `\b[\w._%+\-]+@[\w.\-]+\.[a-zA-Z]{2,}\b`),
37
+ p(EntityType.BIC, String.raw `\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\b`, "bic"),
38
+ p(EntityType.CREDIT_CARD, String.raw `\b(?:4[0-9]{3}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}|5[1-5][0-9]{2}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}|3[47][0-9]{2}[\s\-]?[0-9]{6}[\s\-]?[0-9]{5})\b`, "luhn"),
39
+ p(EntityType.VIN, String.raw `\b[A-HJ-NPR-Z0-9]{17}\b`, "vin"),
40
+ p(EntityType.IP_ADDRESS, String.raw `\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b`),
41
+ p(EntityType.IPV6_ADDRESS, String.raw `\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b|\b(?:[0-9a-fA-F]{1,4}:){1,7}:\b|\b(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}\b|\b::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}\b`),
42
+ p(EntityType.MAC_ADDRESS, String.raw `\b(?:[0-9a-fA-F]{2}[:\-]){5}[0-9a-fA-F]{2}\b`, null, "colon/dash"),
43
+ p(EntityType.MAC_ADDRESS, String.raw `\b[0-9a-fA-F]{4}\.[0-9a-fA-F]{4}\.[0-9a-fA-F]{4}\b`, null, "Cisco"),
44
+ p(EntityType.IMEI, String.raw `\b\d{15}\b`, "imei"),
45
+ p(EntityType.IMEI, String.raw `\b\d{2}[\-\s]\d{6}[\-\s]\d{6}[\-\s]\d\b`, "imei", "formatted"),
46
+ p(EntityType.GPS_COORDINATES, String.raw `-?(?:[1-8]?\d(?:\.\d{4,})|90(?:\.0{4,}))\s*[,;/]\s*-?(?:1[0-7]\d(?:\.\d{4,})|180(?:\.0{4,})|\d{1,2}(?:\.\d{4,}))`),
47
+ p(EntityType.UUID, String.raw `\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}\b`),
48
+ p(EntityType.SOCIAL_HANDLE, String.raw `(?<!\w)@[a-zA-Z][a-zA-Z0-9_.]{1,29}\b`),
49
+ p(EntityType.DOB, String.raw `\b(?:0[1-9]|[12][0-9]|3[01])[/.\-](?:0[1-9]|1[0-2])[/.\-](?:19|20)\d{2}\b`, null, "DD/MM/YYYY", DOB_CONTEXT, true),
50
+ p(EntityType.DATE_OF_DEATH, String.raw `\b(?:0[1-9]|[12][0-9]|3[01])[/.\-](?:0[1-9]|1[0-2])[/.\-](?:19|20)\d{2}\b`, null, "", DATE_OF_DEATH_CONTEXT, true),
51
+ p(EntityType.DOB, String.raw `\b(?:19|20)\d{2}[/.\-](?:0[1-9]|1[0-2])[/.\-](?:0[1-9]|[12][0-9]|3[01])\b`, null, "ISO YYYY-MM-DD", DOB_ISO_CONTEXT, true),
52
+ ],
53
+ };
54
+ const NL = {
55
+ code: "NL",
56
+ name: "Netherlands",
57
+ patterns: [
58
+ p(EntityType.NATIONAL_ID, String.raw `\b[0-9]{9}\b`, "bsn"),
59
+ p(EntityType.NATIONAL_ID, String.raw `\b[0-9]{2,4}\.[0-9]{2,4}\.[0-9]{2,4}\b`, "bsn"),
60
+ p(EntityType.IBAN, String.raw `\bNL\d{2}\s?[A-Z]{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
61
+ p(EntityType.VAT, String.raw `\bNL\d{9}B\d{2}\b`, "vat_nl"),
62
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b\d{8}\b`, "kvk", "", ["KvK", "Kamer van Koophandel", "kvk-nummer", "KVK-nummer", "handelsregister", "chamber of commerce"], true),
63
+ p(EntityType.PHONE, String.raw `\b0[1-9]\d[\s\-]?\d{3}[\s\-]?\d{4}\b`),
64
+ p(EntityType.PHONE, String.raw `\b0[1-9]\d{2}[\s\-]?\d{6,7}\b`),
65
+ p(EntityType.PHONE, String.raw `\b06[\s\-]?\d{4}[\s\-]?\d{4}\b`),
66
+ p(EntityType.PHONE, String.raw `\b06\d{8}\b`),
67
+ p(EntityType.PHONE, String.raw `\b06[\s\-]?\d{2}[\s\-]?\d{2}[\s\-]?\d{2}[\s\-]?\d{2}\b`),
68
+ p(EntityType.PHONE, String.raw `\b0[1-9]\d{1,2}[\s\-]?\d{2,3}[\s\-]?\d{2}[\s\-]?\d{2}\b`),
69
+ p(EntityType.PHONE, String.raw `\+31\s?[1-9]\d{0,2}[\s\-]?\d{3,4}[\s\-]?\d{3,4}\b`),
70
+ p(EntityType.PASSPORT, String.raw `\b[A-Z][A-Z0-9]{8}\b`, null, "", ["paspoort", "passport", "reisdocument", "travel document", "paspoortnummer", "identiteitsbewijs"], true),
71
+ p(EntityType.LICENSE_PLATE, String.raw `\b(?:[A-Z]{2}[\-\s]?\d{3}[\-\s]?[A-Z]|\d[\-\s]?[A-Z]{3}[\-\s]?\d{2}|\d{2}[\-\s]?[A-Z]{3}[\-\s]?\d|[A-Z]{2}[\-\s]?\d{2}[\-\s]?[A-Z]{2}|\d{2}[\-\s]?[A-Z]{2}[\-\s]?\d{2}|\d[\-\s]?[A-Z]{2}[\-\s]?\d{3})\b`),
72
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\s?[A-Z]{2}\b`),
73
+ ],
74
+ };
75
+ const BE = {
76
+ code: "BE",
77
+ name: "Belgium",
78
+ patterns: [
79
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{2}\.?\d{2}\.?\d{2}[\-.]?\d{3}\.?\d{2}\b`, "belgian_nn"),
80
+ p(EntityType.IBAN, String.raw `\bBE\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
81
+ p(EntityType.VAT, String.raw `\bBE\s?0\d{3}\.?\d{3}\.?\d{3}\b`, "belgian_vat"),
82
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b0\d{3}\.?\d{3}\.?\d{3}\b`, null, "", ["KBO", "BCE", "ondernemingsnummer", "numéro d'entreprise", "enterprise number", "bedrijfsnummer"], true),
83
+ p(EntityType.PHONE, String.raw `\b0[1-9]\d{0,2}[/\s.\-]?\d{2,3}[.\s\-]?\d{2,3}[.\s\-]?\d{2,3}\b`),
84
+ p(EntityType.PHONE, String.raw `\+32\s?\d{1,3}[\s.\-]?\d{2,3}[\s.\-]?\d{2}[\s.\-]?\d{2}`),
85
+ p(EntityType.PASSPORT, String.raw `\b[A-Z]{2}\d{6}\b`, null, "", ["paspoort", "passport", "passeport", "reisdocument", "travel document", "document de voyage"], true),
86
+ p(EntityType.DRIVERS_LICENSE, String.raw `\b\d{10}\b`, null, "", ["rijbewijs", "permis de conduire", "driving licence", "driving license", "rijbewijsnummer"], true),
87
+ p(EntityType.LICENSE_PLATE, String.raw `\b[12][\-\s]?[A-Z]{3}[\-\s]?\d{3}\b`),
88
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["postcode", "code postal", "postnummer", "postal code", "zip", "B-", "adres", "adresse", "wonende", "woonplaats", "rue", "straat", "laan", "avenue", "boulevard", "plein", "steenweg", "chaussée", "domicilié", "gedomicilieerd", "Levering:", "siège"], true),
89
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
90
+ p(EntityType.HEALTHCARE_PROVIDER, String.raw `\b\d{1}[\-.]?\d{5}[\-.]?\d{2}[\-.]?\d{3}\b`, null, "", ["RIZIV", "INAMI", "arts", "médecin", "zorgverlener", "prestataire", "dokter", "doctor"], true),
91
+ ],
92
+ };
93
+ const DE = {
94
+ code: "DE",
95
+ name: "Germany",
96
+ patterns: [
97
+ p(EntityType.TAX_ID, String.raw `\b[1-9]\d{10}\b`, "german_tax_id"),
98
+ p(EntityType.TAX_ID, String.raw `\b[1-9]\d[\s.]?\d{3}[\s.]?\d{3}[\s.]?\d{3}\b`, "german_tax_id"),
99
+ p(EntityType.NATIONAL_ID, String.raw `\b[CFGHJKLMNPRTVWXYZ][0-9A-Z]{8,9}\b`, null, "", ["Personalausweis", "Personalausweisnummer", "Ausweis", "Ausweisnummer", "Ausweis-Nr", "identity card", "Identitätskarte", "Perso", "PA-Nummer"], true),
100
+ p(EntityType.IBAN, String.raw `\bDE\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
101
+ p(EntityType.VAT, String.raw `\bDE\s?\d{9}\b`, "vat_de"),
102
+ p(EntityType.PHONE, String.raw `\b0[1-9]\d{1,4}[\s/\-]?\d{3,8}\b`),
103
+ p(EntityType.PHONE, String.raw `\+49\s?\d{2,5}[\s/\-]?\d{3,8}\b`),
104
+ p(EntityType.PASSPORT, String.raw `\b[CFGHJK][0-9A-Z]{8,9}\b`, null, "", ["Reisepass", "passport", "Passnummer", "Reisepassnummer", "Reisepass Nummer", "Reisepass-Nr", "Pass Nr"], true),
105
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-ZÄÖÜ]{1,3}[\s\-]?[A-Z]{1,2}[\s\-]?\d{1,4}[EH]?\b`),
106
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{5}\b`, null, "", ["PLZ", "Postleitzahl", "postal code", "postcode", "Anschrift", "Adresse", "Wohnort", "Ort", "Stadt", "wohnt", "wohnhaft", "Straße", "Str.", "Weg", "Platz", "Allee", "Ring"], true),
107
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\bHR[AB]\s?\d{4,6}\b`),
108
+ p(EntityType.SSN, String.raw `\b\d{2}[\s]?\d{6}[\s]?[A-Z][\s]?\d{3}\b`, null, "", ["Rentenversicherung", "RV-Nummer", "Sozialversicherung", "SV-Nummer", "Versicherungsnummer", "Rentenversicherungsnummer", "Sozialversicherungsnummer"], true),
109
+ p(EntityType.TAX_ID, String.raw `\b\d{2,3}/\d{3,4}/\d{4,5}\b`, null, "", ["Steuernummer", "St.-Nr", "StNr", "Finanzamt", "Steuer"], true),
110
+ p(EntityType.TAX_ID, String.raw `\b\d{13}\b`, null, "", ["Steuernummer", "St.-Nr", "StNr", "Finanzamt", "Steuer"], true),
111
+ p(EntityType.HEALTH_INSURANCE, String.raw `\b[A-Z]\d{9}\b`, null, "", ["Versichertennummer", "Krankenversicherung", "KV-Nummer", "Krankenkasse", "GKV", "Versichertenkarte", "Versicherter", "Versicherte", "KVNR", "Krankenversichertennummer"], true),
112
+ ],
113
+ };
114
+ const AT = {
115
+ code: "AT",
116
+ name: "Austria",
117
+ patterns: [
118
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{4}\s?\d{6}\b`, "austrian_svnr"),
119
+ p(EntityType.IBAN, String.raw `\bAT\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
120
+ p(EntityType.VAT, String.raw `\bATU\d{8}\b`),
121
+ p(EntityType.PHONE, String.raw `\b0\d{3,4}[\s\-]?\d{5,8}\b`),
122
+ p(EntityType.PHONE, String.raw `\+43\s?\d{3,4}[\s\-]?\d{5,8}`),
123
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-ZÄÖÜ]{1,2}\s?\d{1,5}\s?[A-Z]{1,2}\b`, null, "", ["Kennzeichen", "Nummernschild", "Kfz-Kennzeichen"], true),
124
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["PLZ", "Postleitzahl", "Adresse", "Anschrift", "Straße", "Str.", "Gasse", "Weg", "Platz", "Postal:", "Wohnort"], true),
125
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
126
+ ],
127
+ };
128
+ const CH = {
129
+ code: "CH",
130
+ name: "Switzerland",
131
+ patterns: [
132
+ p(EntityType.NATIONAL_ID, String.raw `\b756\.\d{4}\.\d{4}\.\d{2}\b`, "swiss_ahv"),
133
+ p(EntityType.NATIONAL_ID, String.raw `\b756\d{10}\b`, "swiss_ahv"),
134
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\bCHE[\-\s]?\d{3}\.?\d{3}\.?\d{3}\b`),
135
+ p(EntityType.VAT, String.raw `\bCHE[\-\s]?\d{3}\.?\d{3}\.?\d{3}\s?(?:MWST|TVA|IVA)\b`),
136
+ p(EntityType.IBAN, String.raw `\bCH\d{2}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]\b`, "iban"),
137
+ p(EntityType.PHONE, String.raw `\b0\d{2}\s?\d{3}\s?\d{2}\s?\d{2}\b`),
138
+ p(EntityType.PHONE, String.raw `\+41\s?\d{2}\s?\d{3}\s?\d{2}\s?\d{2}`),
139
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}\s?\d{1,6}\b`, null, "", ["Kontrollschild", "Nummernschild", "plaque", "immatriculation", "Kennzeichen"], true),
140
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["PLZ", "Postleitzahl", "code postal", "NPA", "Adresse", "Anschrift", "adresse", "rue", "Straße", "Str.", "Gasse", "chemin", "Postal:", "Wohnort"], true),
141
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
142
+ ],
143
+ };
144
+ const FR = {
145
+ code: "FR",
146
+ name: "France",
147
+ patterns: [
148
+ p(EntityType.NATIONAL_ID, String.raw `\b[12]\s?\d{2}\s?(?:0[1-9]|1[0-2]|[2-9]\d)\s?\d{2}[0-9AB]?\s?\d{3}\s?\d{3}\s?\d{2}\b`, "french_nir"),
149
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{12}\b`, null, "", ["carte d'identité", "CNI", "carte nationale", "identity card", "pièce d'identité"], true),
150
+ p(EntityType.IBAN, String.raw `\bFR\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{3}\b`, "iban"),
151
+ p(EntityType.VAT, String.raw `\bFR\s?[0-9A-HJ-NP-Z]{2}\s?\d{9}\b`, "vat_fr"),
152
+ p(EntityType.PHONE, String.raw `\b0[1-9][\s.\-]?\d{2}[\s.\-]?\d{2}[\s.\-]?\d{2}[\s.\-]?\d{2}\b`),
153
+ p(EntityType.PHONE, String.raw `\+33\s?[1-9][\s.\-]?\d{2}[\s.\-]?\d{2}[\s.\-]?\d{2}[\s.\-]?\d{2}`),
154
+ p(EntityType.PASSPORT, String.raw `\b\d{2}[A-Z]{2}\d{5}\b`, null, "", ["passeport", "passport", "numéro de passeport"], true),
155
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}[\-\s]?\d{3}[\-\s]?[A-Z]{2}\b`),
156
+ p(EntityType.POSTAL_CODE, String.raw `\b(?:0[1-9]|[1-8]\d|9[0-5]|97[1-6])\d{3}\b`, null, "", ["code postal", "CP", "postal code", "postcode", "adresse", "domicilié", "résidant", "rue", "avenue", "boulevard", "place", "chemin", "allée", "impasse", "ville"], true),
157
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b\d{3}\s?\d{3}\s?\d{3}\b`, null, "", ["SIREN", "siren", "RCS", "entreprise", "immatricul", "numéro d'entreprise", "registre du commerce"], true),
158
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b\d{3}\s?\d{3}\s?\d{3}\s?\d{5}\b`, null, "", ["SIRET", "siret", "établissement", "immatricul"], true),
159
+ p(EntityType.TAX_ID, String.raw `\b\d{13}\b`, null, "", ["numéro fiscal", "SPI", "référence fiscale", "avis d'impôt", "impôt sur le revenu", "déclaration fiscale", "fiscal"], true),
160
+ ],
161
+ };
162
+ const DK = {
163
+ code: "DK",
164
+ name: "Denmark",
165
+ patterns: [
166
+ p(EntityType.NATIONAL_ID, String.raw `\b(?:0[1-9]|[12]\d|3[01])(?:0[1-9]|1[0-2])\d{2}-\d{4}\b`),
167
+ p(EntityType.NATIONAL_ID, String.raw `\b(?:0[1-9]|[12]\d|3[01])(?:0[1-9]|1[0-2])\d{6}\b`, "danish_cpr"),
168
+ p(EntityType.IBAN, String.raw `\bDK\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
169
+ p(EntityType.VAT, String.raw `\bDK\s?\d{8}\b`, "danish_vat"),
170
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b\d{8}\b`, "danish_vat", "", ["CVR", "CVR-nummer", "virksomhedsnummer", "virksomhedsregisteret"], true),
171
+ p(EntityType.PHONE, String.raw `\b[2-9]\d\s?\d{2}\s?\d{2}\s?\d{2}\b`),
172
+ p(EntityType.PHONE, String.raw `\+45\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}`),
173
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}\s?\d{2}\s?\d{3}\b`, null, "", ["nummerplade", "registreringsnummer", "reg.nr", "køretøj"], true),
174
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["postnummer", "postby", "postnr", "adresse", "bopæl", "bopælsadresse", "gade", "vej", "allé", "plads", "torv", "stræde", "boulevard", "Arbejdssted"], true),
175
+ ],
176
+ };
177
+ const SE = {
178
+ code: "SE",
179
+ name: "Sweden",
180
+ patterns: [
181
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{8}[-+]?\d{4}\b`, "swedish_pnr"),
182
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}[-+]\d{4}\b`, "swedish_pnr"),
183
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{10}\b`, "swedish_pnr"),
184
+ p(EntityType.IBAN, String.raw `\bSE\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
185
+ p(EntityType.VAT, String.raw `\bSE\d{12}\b`),
186
+ p(EntityType.PHONE, String.raw `\b0\d{1,3}[\-\s]?\d{2,3}[\s]?\d{2,3}[\s]?\d{2}\b`),
187
+ p(EntityType.PHONE, String.raw `\+46\s?\d{1,3}[\s\-]?\d{2,3}[\s\-]?\d{2,3}[\s\-]?\d{2}`),
188
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{3}\s?\d{2}[A-Z0-9]\b`),
189
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{3}\s?\d{2}\b`, null, "", ["postnummer", "postort", "postkod", "adress", "bostadsadress", "gatuadress", "boende", "gatan", "vägen", "gata", "väg", "allé", "plats", "torg", "stigen", "Bostadsadress"], true),
190
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{4}\s\d{2}\b`, null, "", ["postnummer", "postort", "postkod", "adress", "bostadsadress", "gatuadress", "boende", "gatan", "vägen", "gata", "väg", "allé"], true),
191
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{6}\b`, null, "", ["postnummer", "postort", "postkod", "adress", "bostadsadress", "gatuadress", "boende", "gatan", "vägen", "gata", "väg", "allé"], true),
192
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b\d{6}-?\d{4}\b`, null, "", ["organisationsnummer", "org.nr", "org nr", "Bolagsverket", "registreringsnummer"], true),
193
+ ],
194
+ };
195
+ const NO = {
196
+ code: "NO",
197
+ name: "Norway",
198
+ patterns: [
199
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{11}\b`, "norwegian_fnr"),
200
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}\s\d{5}\b`, "norwegian_fnr"),
201
+ p(EntityType.IBAN, String.raw `\bNO\d{2}\s?\d{4}\s?\d{4}\s?\d{3}\b`, "iban"),
202
+ p(EntityType.VAT, String.raw `\bNO\s?\d{9}\s?MVA\b`),
203
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b[89]\d{8}\b`, "norwegian_org"),
204
+ p(EntityType.PHONE, String.raw `\b[2-9]\d\s?\d{2}\s?\d{2}\s?\d{2}\b`),
205
+ p(EntityType.PHONE, String.raw `\+47\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}`),
206
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}\s?\d{5}\b`),
207
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{4}\b`, null, "", ["postnummer", "poststed", "postnr", "adresse", "bostedsadresse", "gate", "vei", "veien", "gata", "plass", "stien", "allé"], true),
208
+ ],
209
+ };
210
+ const FI = {
211
+ code: "FI",
212
+ name: "Finland",
213
+ patterns: [
214
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}[-+ABCDEFYXWVU]\d{3}[0-9A-FHJK-NPR-Y]\b`, "finnish_hetu"),
215
+ p(EntityType.IBAN, String.raw `\bFI\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
216
+ p(EntityType.VAT, String.raw `\bFI\d{8}\b`),
217
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b\d{7}-\d\b`, "finnish_business_id"),
218
+ p(EntityType.PHONE, String.raw `\b0\d{1,2}\s?\d{3,4}\s?\d{3,4}\b`),
219
+ p(EntityType.PHONE, String.raw `\+358\s?\d{1,3}[\s\-]?\d{3,4}[\s\-]?\d{3,4}`),
220
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2,3}[\-\s]?\d{3}\b`, null, "", ["rekisteritunnus", "rekisterinumero", "rekisterikilpi", "ajoneuvo"], true),
221
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{5}\b`, null, "", ["postinumero", "postitoimipaikka", "osoite", "kotiosoite", "katuosoite"], true),
222
+ ],
223
+ };
224
+ const IS = {
225
+ code: "IS",
226
+ name: "Iceland",
227
+ patterns: [
228
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}-?\d{4}\b`, "icelandic_kt"),
229
+ p(EntityType.IBAN, String.raw `\bIS\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
230
+ p(EntityType.PHONE, String.raw `\b[3-9]\d{2}\s\d{4}\b`),
231
+ p(EntityType.PHONE, String.raw `\b[3-9]\d{6}\b`, null, "", ["sími", "símanúmer", "farsími", "gsm", "phone", "tel", "hringja", "hringdu", "ná í", "nás á", "nás", "SMS", "sent to"], true),
232
+ p(EntityType.PHONE, String.raw `\+354\s?\d{3}\s?\d{4}`),
233
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}\s?\d{3}\b`, null, "", ["skráningarnúmer", "bílnúmer", "ökutæki", "bifreið", "plata"], true),
234
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{2}\b`, null, "", ["póstnúmer", "póstfang", "staður", "heimilisfang"], true),
235
+ ],
236
+ };
237
+ const IT = {
238
+ code: "IT",
239
+ name: "Italy",
240
+ patterns: [
241
+ p(EntityType.NATIONAL_ID, String.raw `\b[A-Z]{6}\d{2}[ABCDEHLMPRST]\d{2}[A-Z]\d{3}[A-Z]\b`, "italian_cf"),
242
+ p(EntityType.IBAN, String.raw `\bIT\d{2}\s?[A-Z]\d{3}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{3}\b`, "iban"),
243
+ p(EntityType.IBAN, String.raw `\bIT\d{2}[A-Z]\d{22}\b`, "iban"),
244
+ p(EntityType.VAT, String.raw `\bIT\d{11}\b`),
245
+ p(EntityType.PHONE, String.raw `\b3\d{2}[\s\-]?\d{3}[\s\-]?\d{4}\b`),
246
+ p(EntityType.PHONE, String.raw `\b0\d{1,3}[\s\-]?\d{6,8}\b`),
247
+ p(EntityType.PHONE, String.raw `\b0\d{1,2}[\s\-]\d{3}[\s\-]\d{4}\b`),
248
+ p(EntityType.PHONE, String.raw `\+39\s?\d{2,3}[\s\-]?\d{3,4}[\s\-]?\d{3,4}`),
249
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}\s?\d{3}\s?[A-Z]{2}\b`),
250
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{5}\b`, null, "", ["CAP", "codice postale", "codice di avviamento", "indirizzo", "via", "viale", "piazza", "corso", "largo", "vicolo", "Domicilio", "domicilio", "Residenza", "residenza", "Postal:"], true),
251
+ ],
252
+ };
253
+ const ES = {
254
+ code: "ES",
255
+ name: "Spain",
256
+ patterns: [
257
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{8}[A-Z]\b`, "spanish_dni"),
258
+ p(EntityType.NATIONAL_ID, String.raw `\b[XYZ]\d{7}[A-Z]\b`, "spanish_nie"),
259
+ p(EntityType.IBAN, String.raw `\bES\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
260
+ p(EntityType.VAT, String.raw `\bES[A-Z0-9]\d{7}[A-Z0-9]\b`),
261
+ p(EntityType.PHONE, String.raw `\b[679]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
262
+ p(EntityType.PHONE, String.raw `\b[679]\d{8}\b`),
263
+ p(EntityType.PHONE, String.raw `\b[679]\d[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}\b`),
264
+ p(EntityType.PHONE, String.raw `\+34\s?[679]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}`),
265
+ p(EntityType.LICENSE_PLATE, String.raw `\b\d{4}\s?[BCDFGHJKLMNPRSTVWXYZ]{3}\b`),
266
+ p(EntityType.POSTAL_CODE, String.raw `\b(?:0[1-9]|[1-4]\d|5[0-2])\d{3}\b`, null, "", ["código postal", "C.P.", "CP", "dirección", "domicilio", "calle", "avenida", "plaza", "paseo", "camino", "Postal:"], true),
267
+ ],
268
+ };
269
+ const PT = {
270
+ code: "PT",
271
+ name: "Portugal",
272
+ patterns: [
273
+ p(EntityType.NATIONAL_ID, String.raw `\b[1-35-9]\d{8}\b`, "portuguese_nif"),
274
+ p(EntityType.NATIONAL_ID, String.raw `\b[1-35-9]\d{2}[\s.]\d{3}[\s.]\d{3}\b`, "portuguese_nif"),
275
+ p(EntityType.IBAN, String.raw `\bPT\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{5}\b`, "iban"),
276
+ p(EntityType.VAT, String.raw `\bPT\d{9}\b`),
277
+ p(EntityType.PHONE, String.raw `\b[29]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
278
+ p(EntityType.PHONE, String.raw `\b[29]\d{8}\b`),
279
+ p(EntityType.PHONE, String.raw `\+351\s?[29]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}`),
280
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}\b`),
281
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{4}-\d{3}\b`),
282
+ ],
283
+ };
284
+ const LU = {
285
+ code: "LU",
286
+ name: "Luxembourg",
287
+ patterns: [
288
+ p(EntityType.NATIONAL_ID, String.raw `\b(?:19|20)\d{2}\s(?:0[1-9]|1[0-2])\s(?:0[1-9]|[12]\d|3[01])\s\d{3}\s\d{2}\b`),
289
+ p(EntityType.NATIONAL_ID, String.raw `\b(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{5}\b`),
290
+ p(EntityType.IBAN, String.raw `\bLU\d{2}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\b`, "iban"),
291
+ p(EntityType.VAT, String.raw `\bLU\s?\d{8}\b`, "vat_lu"),
292
+ p(EntityType.PHONE, String.raw `\b(?:2[0-9]|[4-9]\d)[\s\-]?\d{2}[\s\-]?\d{2}[\s\-]?\d{2}\b`),
293
+ p(EntityType.PHONE, String.raw `\b(?:2[0-9]|[4-9]\d)\d{6}\b`),
294
+ p(EntityType.PHONE, String.raw `\b6[2-9]\d[\s\-]?\d{3}[\s\-]?\d{3}\b`),
295
+ p(EntityType.PHONE, String.raw `\+352\s?\d{2,3}[\s\-]?\d{2,3}[\s\-]?\d{2,4}`),
296
+ p(EntityType.POSTAL_CODE, String.raw `\bL[\-\s]?\d{4}\b`),
297
+ p(EntityType.LICENSE_PLATE, String.raw `\b[A-Z]{2}[\s\-]?\d{3,5}\b`, null, "", ["plaque", "immatriculation", "Kennzeichen", "nummerplaat", "véhicule", "voiture", "Fahrzeug", "immatriculé"], true),
298
+ p(EntityType.CHAMBER_OF_COMMERCE, String.raw `\b[ABCDEFGJ]\s?\d{4,6}\b`, null, "", ["RCS", "Registre de Commerce", "Handelsregister", "registre", "inscrit"], true),
299
+ ],
300
+ };
301
+ const PL = {
302
+ code: "PL",
303
+ name: "Poland",
304
+ patterns: [
305
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{11}\b`, "polish_pesel"),
306
+ p(EntityType.TAX_ID, String.raw `\b\d{3}-?\d{3}-?\d{2}-?\d{2}\b`, "polish_nip"),
307
+ p(EntityType.IBAN, String.raw `\bPL\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
308
+ p(EntityType.IBAN, String.raw `\bPL\d{26}\b`, "iban"),
309
+ p(EntityType.VAT, String.raw `\bPL\d{10}\b`),
310
+ p(EntityType.PHONE, String.raw `\b[5-8]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
311
+ p(EntityType.PHONE, String.raw `\b[5-8]\d{8}\b`),
312
+ p(EntityType.PHONE, String.raw `\+48\s?[5-8]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}`),
313
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{2}-\d{3}\b`, null, "", ["kod pocztowy", "adres", "ulica", "Postal:", "Address:"]),
314
+ ],
315
+ };
316
+ const IE = {
317
+ code: "IE",
318
+ name: "Ireland",
319
+ patterns: [
320
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{7}[A-W][ABWTXZ]?\b`, "irish_pps"),
321
+ p(EntityType.IBAN, String.raw `\bIE\d{2}\s?[A-Z]{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
322
+ p(EntityType.IBAN, String.raw `\bIE\d{2}[A-Z]{4}\d{14}\b`, "iban"),
323
+ p(EntityType.VAT, String.raw `\bIE\d{7}[A-Z]\b`),
324
+ p(EntityType.PHONE, String.raw `\b0[89]\d[\s\-]?\d{3}[\s\-]?\d{4}\b`),
325
+ p(EntityType.PHONE, String.raw `\b0[89]\d{8}\b`),
326
+ p(EntityType.PHONE, String.raw `\b0[1-9]\d{0,2}[\s\-]?\d{5,8}\b`),
327
+ p(EntityType.PHONE, String.raw `\+353\s?\d{1,3}[\s\-]?\d{3,4}[\s\-]?\d{3,4}`),
328
+ p(EntityType.POSTAL_CODE, String.raw `\b[A-Z]\d{2}\s?[A-Z0-9]{4}\b`, null, "", ["Eircode", "postcode", "postal code", "address", "Address:", "Postal:"], true),
329
+ ],
330
+ };
331
+ const UK = {
332
+ code: "UK",
333
+ name: "United Kingdom",
334
+ patterns: [
335
+ p(EntityType.NATIONAL_ID, String.raw `\b[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z]\s?\d{2}\s?\d{2}\s?\d{2}\s?[ABCD]\b`),
336
+ p(EntityType.HEALTH_INSURANCE, String.raw `\b\d{3}\s?\d{3}\s?\d{4}\b`, "uk_nhs", "", ["NHS", "NHS number", "health number", "NHS no"], true),
337
+ p(EntityType.IBAN, String.raw `\bGB\d{2}\s?[A-Z]{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
338
+ p(EntityType.IBAN, String.raw `\bGB\d{2}[A-Z]{4}\d{14}\b`, "iban"),
339
+ p(EntityType.VAT, String.raw `\bGB\d{9}\b`),
340
+ p(EntityType.PHONE, String.raw `\b07[4-9]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
341
+ p(EntityType.PHONE, String.raw `\b07[4-9]\d{8}\b`),
342
+ p(EntityType.PHONE, String.raw `\b0[12]\d{2}[\s\-]?\d{3}[\s\-]?\d{4}\b`),
343
+ p(EntityType.PHONE, String.raw `\b0[12]\d{2}[\s\-]?\d{4}[\s\-]?\d{4}\b`),
344
+ p(EntityType.PHONE, String.raw `\b0[12]\d{9,10}\b`),
345
+ p(EntityType.PHONE, String.raw `\+44\s?\d{2,4}[\s\-]?\d{3,4}[\s\-]?\d{3,4}`),
346
+ p(EntityType.POSTAL_CODE, String.raw `\b[A-Z]{1,2}\d[A-Z\d]?\s?\d[A-Z]{2}\b`),
347
+ ],
348
+ };
349
+ const BG = {
350
+ code: "BG",
351
+ name: "Bulgaria",
352
+ patterns: [
353
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{10}\b`, "bulgarian_egn"),
354
+ p(EntityType.IBAN, String.raw `\bBG\d{2}\s?[A-Z]{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}\b`, "iban"),
355
+ p(EntityType.VAT, String.raw `\bBG\d{9,10}\b`),
356
+ p(EntityType.PHONE, String.raw `\b0?[89][789][\s\-]?\d{3}[\s\-]?\d{3,4}\b`),
357
+ p(EntityType.PHONE, String.raw `\b0?[89][789]\d{7,8}\b`),
358
+ p(EntityType.PHONE, String.raw `\+359\s?[89][789][\s\-]?\d{3}[\s\-]?\d{3,4}`),
359
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["пощенски код", "пощенски", "адрес", "ул.", "Postal:", "Address:"], true),
360
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
361
+ ],
362
+ };
363
+ const CY = {
364
+ code: "CY",
365
+ name: "Cyprus",
366
+ patterns: [
367
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{8}[A-Z]\b`),
368
+ p(EntityType.IBAN, String.raw `\bCY\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
369
+ p(EntityType.IBAN, String.raw `\bCY\d{26}\b`, "iban"),
370
+ p(EntityType.VAT, String.raw `\bCY\d{8}[A-Z]\b`),
371
+ p(EntityType.PHONE, String.raw `\b[29]\d{3}[\s\-]?\d{4}\b`),
372
+ p(EntityType.PHONE, String.raw `\b[29]\d[\s\-]?\d{3}[\s\-]?\d{3}\b`),
373
+ p(EntityType.PHONE, String.raw `\b[29]\d{7}\b`),
374
+ p(EntityType.PHONE, String.raw `\+357\s?[29]\d[\s\-]?\d{3}[\s\-]?\d{3,4}`),
375
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["Τ.Κ.", "ταχυδρομικός", "address", "Address:", "Postal:", "διεύθυνση"], true),
376
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
377
+ ],
378
+ };
379
+ const CZ = {
380
+ code: "CZ",
381
+ name: "Czech Republic",
382
+ patterns: [
383
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}/?\d{3,4}\b`, "czech_birth_number"),
384
+ p(EntityType.IBAN, String.raw `\bCZ\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
385
+ p(EntityType.IBAN, String.raw `\bCZ\d{22}\b`, "iban"),
386
+ p(EntityType.VAT, String.raw `\bCZ\d{8,10}\b`),
387
+ p(EntityType.PHONE, String.raw `\b[67]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
388
+ p(EntityType.PHONE, String.raw `\b[67]\d{8}\b`),
389
+ p(EntityType.PHONE, String.raw `\+420\s?[67]\d{2}[\s\-]?\d{3}[\s\-]?\d{3}`),
390
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{3}\s?\d{2}\b`, null, "", ["PSČ", "poštovní", "adresa", "ulice", "Postal:", "Address:"], true),
391
+ ],
392
+ };
393
+ const SK = {
394
+ code: "SK",
395
+ name: "Slovakia",
396
+ patterns: [
397
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}/?\d{3,4}\b`, "czech_birth_number"),
398
+ p(EntityType.IBAN, String.raw `\bSK\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
399
+ p(EntityType.IBAN, String.raw `\bSK\d{22}\b`, "iban"),
400
+ p(EntityType.VAT, String.raw `\bSK\d{10}\b`),
401
+ p(EntityType.PHONE, String.raw `\b0?9\d{2}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
402
+ p(EntityType.PHONE, String.raw `\+421\s?9\d{2}[\s\-]?\d{3}[\s\-]?\d{3}`),
403
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{3}\s?\d{2}\b`, null, "", ["PSČ", "poštové", "adresa", "ulica", "Postal:", "Address:"], true),
404
+ ],
405
+ };
406
+ const EE = {
407
+ code: "EE",
408
+ name: "Estonia",
409
+ patterns: [
410
+ p(EntityType.NATIONAL_ID, String.raw `\b[1-6]\d{10}\b`, "estonian_id"),
411
+ p(EntityType.IBAN, String.raw `\bEE\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
412
+ p(EntityType.IBAN, String.raw `\bEE\d{18}\b`, "iban"),
413
+ p(EntityType.VAT, String.raw `\bEE\d{9}\b`),
414
+ p(EntityType.PHONE, String.raw `\b5\d{3}[\s\-]?\d{4}\b`),
415
+ p(EntityType.PHONE, String.raw `\b5\d{7}\b`),
416
+ p(EntityType.PHONE, String.raw `\+372\s?5\d{3}[\s\-]?\d{3,4}`),
417
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{5}\b`, null, "", ["postiindeks", "sihtnumber", "aadress", "address", "Address:", "Postal:"], true),
418
+ ],
419
+ };
420
+ const LT = {
421
+ code: "LT",
422
+ name: "Lithuania",
423
+ patterns: [
424
+ p(EntityType.NATIONAL_ID, String.raw `\b[1-6]\d{10}\b`, "estonian_id"),
425
+ p(EntityType.IBAN, String.raw `\bLT\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
426
+ p(EntityType.IBAN, String.raw `\bLT\d{18}\b`, "iban"),
427
+ p(EntityType.VAT, String.raw `\bLT\d{9,12}\b`),
428
+ p(EntityType.PHONE, String.raw `\b6\d{2}[\s\-]?\d{2}[\s\-]?\d{3}\b`),
429
+ p(EntityType.PHONE, String.raw `\b6\d{7}\b`),
430
+ p(EntityType.PHONE, String.raw `\b8[\s\-]?6\d{2}[\s\-]?\d{2}[\s\-]?\d{3}\b`),
431
+ p(EntityType.PHONE, String.raw `\+370\s?6\d{2}[\s\-]?\d{2}[\s\-]?\d{3}`),
432
+ p(EntityType.POSTAL_CODE, String.raw `\bLT-\d{5}\b`),
433
+ ],
434
+ };
435
+ const LV = {
436
+ code: "LV",
437
+ name: "Latvia",
438
+ patterns: [
439
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{6}-\d{5}\b`),
440
+ p(EntityType.NATIONAL_ID, String.raw `\b(?:0[1-9]|[12]\d|3[01])(?:0[1-9]|1[0-2])\d{7}\b`, null, "", ["personas kods", "PK", "identifikācijas"], true),
441
+ p(EntityType.IBAN, String.raw `\bLV\d{2}\s?[A-Z]{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d\b`, "iban"),
442
+ p(EntityType.IBAN, String.raw `\bLV\d{2}[A-Z]{4}\d{13}\b`, "iban"),
443
+ p(EntityType.VAT, String.raw `\bLV\d{11}\b`),
444
+ p(EntityType.PHONE, String.raw `\b[2]\d{3}[\s\-]?\d{4}\b`),
445
+ p(EntityType.PHONE, String.raw `\b[2]\d{7}\b`),
446
+ p(EntityType.PHONE, String.raw `\+371\s?[2]\d{3}[\s\-]?\d{3,4}`),
447
+ p(EntityType.POSTAL_CODE, String.raw `\bLV-\d{4}\b`),
448
+ ],
449
+ };
450
+ const HR = {
451
+ code: "HR",
452
+ name: "Croatia",
453
+ patterns: [
454
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{11}\b`, "croatian_oib"),
455
+ p(EntityType.IBAN, String.raw `\bHR\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{3}\b`, "iban"),
456
+ p(EntityType.IBAN, String.raw `\bHR\d{2}\s\d{4}\s\d{4}\s\d{4}\s\d{5}\b`, "iban"),
457
+ p(EntityType.IBAN, String.raw `\bHR\d{19}\b`, "iban"),
458
+ p(EntityType.VAT, String.raw `\bHR\d{11}\b`),
459
+ p(EntityType.PHONE, String.raw `\b0?9[12579][\s\-]?\d{3}[\s\-]?\d{3,4}\b`),
460
+ p(EntityType.PHONE, String.raw `\b0?9[12579]\d{7,8}\b`),
461
+ p(EntityType.PHONE, String.raw `\+385\s?9[12579][\s\-]?\d{3}[\s\-]?\d{3,4}`),
462
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-5]\d{4}\b`, null, "", ["poštanski broj", "poštanski", "adresa", "ulica", "Postal:", "Address:"], true),
463
+ ],
464
+ };
465
+ const HU = {
466
+ code: "HU",
467
+ name: "Hungary",
468
+ patterns: [
469
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{9}\b`, "hungarian_taj"),
470
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{3}\s\d{3}\s\d{3}\b`, "hungarian_taj"),
471
+ p(EntityType.TAX_ID, String.raw `\b8\d{9}\b`, null, "", ["adóazonosító", "adószám", "adóazonosító jel"], true),
472
+ p(EntityType.VAT, String.raw `\bHU\d{8,11}\b`, null, "", ["adószám", "ÁFA"]),
473
+ p(EntityType.IBAN, String.raw `\bHU\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\b`, "iban"),
474
+ p(EntityType.IBAN, String.raw `\bHU\d{26}\b`, "iban"),
475
+ p(EntityType.PHONE, String.raw `\b06\s?\d{1,2}[\s\-]?\d{3}[\s\-]?\d{3,4}\b`),
476
+ p(EntityType.PHONE, String.raw `\+36\s?\d{1,2}[\s\-]?\d{3}[\s\-]?\d{3,4}`),
477
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["irányítószám", "postai", "cím", "utca", "Postal:", "Address:"], true),
478
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
479
+ ],
480
+ };
481
+ const RO = {
482
+ code: "RO",
483
+ name: "Romania",
484
+ patterns: [
485
+ p(EntityType.NATIONAL_ID, String.raw `\b[1-8]\d{12}\b`, "romanian_cnp"),
486
+ p(EntityType.IBAN, String.raw `\bRO\d{2}[A-Z]{4}\d{16}\b`, "iban"),
487
+ p(EntityType.VAT, String.raw `\bRO\d{2,10}\b`),
488
+ p(EntityType.PHONE, String.raw `\b0?7[2-9]\d{1}[\s\-]?\d{3}[\s\-]?\d{3,4}\b`),
489
+ p(EntityType.PHONE, String.raw `\b0?7[2-9]\d{7,8}\b`),
490
+ p(EntityType.PHONE, String.raw `\+40\s?7[2-9]\d{1}[\s\-]?\d{3}[\s\-]?\d{3,4}`),
491
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{6}\b`, null, "", ["cod poștal", "cod postal", "adresă", "strada", "Postal:", "Address:"], true),
492
+ ],
493
+ };
494
+ const EL = {
495
+ code: "EL",
496
+ name: "Greece",
497
+ patterns: [
498
+ p(EntityType.TAX_ID, String.raw `\b\d{9}\b`, "greek_afm"),
499
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{11}\b`, "greek_amka"),
500
+ p(EntityType.IBAN, String.raw `\bGR\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{3}\b`, "iban"),
501
+ p(EntityType.IBAN, String.raw `\bGR\d{25}\b`, "iban"),
502
+ p(EntityType.VAT, String.raw `\bEL\d{9}\b`),
503
+ p(EntityType.PHONE, String.raw `\b69\d[\s\-]?\d{3,4}[\s\-]?\d{4}\b`),
504
+ p(EntityType.PHONE, String.raw `\b69\d{8}\b`),
505
+ p(EntityType.PHONE, String.raw `\b2\d{1,3}[\s\-]?\d{3,4}[\s\-]?\d{3,4}\b`),
506
+ p(EntityType.PHONE, String.raw `\+30\s?\d{2,4}[\s\-]?\d{3,4}[\s\-]?\d{3,4}`),
507
+ p(EntityType.POSTAL_CODE, String.raw `\b\d{3}\s?\d{2}\b`, null, "", ["Τ.Κ.", "ταχυδρομικός", "address", "Address:", "Postal:", "διεύθυνση", "οδός"], true),
508
+ ],
509
+ };
510
+ const SI = {
511
+ code: "SI",
512
+ name: "Slovenia",
513
+ patterns: [
514
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{13}\b`, "slovenian_emso"),
515
+ p(EntityType.IBAN, String.raw `\bSI\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{3}\b`, "iban"),
516
+ p(EntityType.IBAN, String.raw `\bSI\d{17}\b`, "iban"),
517
+ p(EntityType.VAT, String.raw `\bSI\d{8}\b`),
518
+ p(EntityType.PHONE, String.raw `\b0?[34567]\d{1}[\s\-]?\d{3}[\s\-]?\d{3}\b`),
519
+ p(EntityType.PHONE, String.raw `\b0?[34567]\d{7}\b`),
520
+ p(EntityType.PHONE, String.raw `\+386\s?[34567]\d{1}[\s\-]?\d{3}[\s\-]?\d{3}`),
521
+ p(EntityType.POSTAL_CODE, String.raw `\b[1-9]\d{3}\b`, null, "", ["poštna številka", "poštna", "naslov", "ulica", "Postal:", "Address:"], true),
522
+ p(EntityType.POSTAL_CODE, String.raw `(?<=, )[1-9]\d{3}(?= [A-Z])`),
523
+ ],
524
+ };
525
+ const MT = {
526
+ code: "MT",
527
+ name: "Malta",
528
+ patterns: [
529
+ p(EntityType.NATIONAL_ID, String.raw `\b\d{5,7}[MGAPLHBZ]\b`),
530
+ p(EntityType.IBAN, String.raw `\bMT\d{2}\s?[A-Z]{4}\s?\d{4}\s?\d{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{4}\s?[A-Z0-9]{3}\b`, "iban"),
531
+ p(EntityType.IBAN, String.raw `\bMT\d{2}[A-Z]{4}\d{5}[A-Z0-9]{18}\b`, "iban"),
532
+ p(EntityType.VAT, String.raw `\bMT\d{8}\b`),
533
+ p(EntityType.PHONE, String.raw `\b[79]\d{3}[\s\-]?\d{4}\b`),
534
+ p(EntityType.PHONE, String.raw `\b[79]\d{7}\b`),
535
+ p(EntityType.PHONE, String.raw `\+356\s?[79]\d{3}[\s\-]?\d{3,4}`),
536
+ p(EntityType.POSTAL_CODE, String.raw `\b[A-Z]{3}\s?\d{4}\b`, null, "", ["kodiċi postali", "postcode", "address", "Address:", "Postal:"], true),
537
+ ],
538
+ };
539
+ // ---------------------------------------------------------------------------
540
+ // Export all configs as a single Record
541
+ // ---------------------------------------------------------------------------
542
+ export const COUNTRY_CONFIGS = {
543
+ SHARED,
544
+ NL,
545
+ BE,
546
+ DE,
547
+ AT,
548
+ CH,
549
+ FR,
550
+ DK,
551
+ SE,
552
+ NO,
553
+ FI,
554
+ IS,
555
+ IT,
556
+ ES,
557
+ PT,
558
+ LU,
559
+ PL,
560
+ IE,
561
+ UK,
562
+ BG,
563
+ CY,
564
+ CZ,
565
+ SK,
566
+ EE,
567
+ LT,
568
+ LV,
569
+ HR,
570
+ HU,
571
+ RO,
572
+ EL,
573
+ SI,
574
+ MT,
575
+ };
@@ -0,0 +1,9 @@
1
+ import { type Detection } from "../types.js";
2
+ export declare class RuleEngine {
3
+ private matcher;
4
+ private loadedCountries;
5
+ loadCountries(countryCodes: string[] | null): void;
6
+ detect(text: string, countryCodes: string[] | null): Detection[];
7
+ private deduplicate;
8
+ getLoadedCountries(): Set<string>;
9
+ }