diff --git a/client/src/locales/de/translation.json b/client/src/locales/de/translation.json index e02c702e..d9e2b6b3 100644 --- a/client/src/locales/de/translation.json +++ b/client/src/locales/de/translation.json @@ -219,6 +219,7 @@ "a.Personen, die du begleitest": "Personen, die du begleitest ", "a.Persönliche Informationen": "Persönliche Informationen", "a.PLZ": "PLZ", + "a.Postleizahl hat das falsche Format": "Postleizahl hat das falsche Format", "a.Praxisauftrag": "Praxisauftrag", "a.Praxisaufträge anschauen": "Praxisaufträge anschauen", "a.Praxisbildner": "Praxisbildner", diff --git a/client/src/locales/fr/translation.json b/client/src/locales/fr/translation.json index 3de4022c..ef3c306a 100644 --- a/client/src/locales/fr/translation.json +++ b/client/src/locales/fr/translation.json @@ -219,6 +219,7 @@ "a.Personen, die du begleitest": "Personnes que tu accompagnes", "a.Persönliche Informationen": "Informations personnelles", "a.PLZ": "Code postal", + "a.Postleizahl hat das falsche Format": "Le code postal n'a pas le bon format", "a.Praxisauftrag": "Exercice pratique", "a.Praxisaufträge anschauen": "Voir les missions pratiques", "a.Praxisbildner": "Formateur pratique", diff --git a/client/src/locales/it/translation.json b/client/src/locales/it/translation.json index 30f04667..da81b106 100644 --- a/client/src/locales/it/translation.json +++ b/client/src/locales/it/translation.json @@ -219,6 +219,7 @@ "a.Personen, die du begleitest": "Persone che accompagni", "a.Persönliche Informationen": "Informazioni personali", "a.PLZ": "CAP", + "a.Postleizahl hat das falsche Format": "Il codice postale ha un formato sbagliato", "a.Praxisauftrag": "Lavoro pratico", "a.Praxisaufträge anschauen": "Visualizzare gli incarichi pratici", "a.Praxisbildner": "Formatore pratico", diff --git a/client/src/pages/onboarding/vv/CheckoutAddress.vue b/client/src/pages/onboarding/vv/CheckoutAddress.vue index 89d71557..cb1b7b72 100644 --- a/client/src/pages/onboarding/vv/CheckoutAddress.vue +++ b/client/src/pages/onboarding/vv/CheckoutAddress.vue @@ -15,6 +15,7 @@ import { useEntities } from "@/services/entities"; import { getLocalSessionKey } from "@/statistics"; import { type User, useUserStore } from "@/stores/user"; import { normalizeSwissPhoneNumber, validatePhoneNumber } from "@/utils/phone"; +import { validatePostalCode } from "@/utils/postalcode"; import { useTranslation } from "i18next-vue"; import log from "loglevel"; import { computed, ref, watch } from "vue"; @@ -129,6 +130,8 @@ function validateAddress() { if (!address.value.postal_code) { formErrors.value.personal.push(t("a.PLZ")); + } else if (!validatePostalCode(address.value.postal_code)) { + formErrors.value.personal.push(t("a.Postleizahl hat das falsche Format")); } if (!address.value.city) { @@ -172,6 +175,8 @@ function validateAddress() { if (!address.value.organisation_postal_code) { formErrors.value.company.push(t("a.PLZ")); + } else if (!validatePostalCode(address.value.organisation_postal_code)) { + formErrors.value.personal.push(t("a.Postleizahl hat das falsche Format")); } if (!address.value.organisation_city) { diff --git a/client/src/utils/postalcode.ts b/client/src/utils/postalcode.ts new file mode 100644 index 00000000..59fdac69 --- /dev/null +++ b/client/src/utils/postalcode.ts @@ -0,0 +1,10 @@ +export function validatePostalCode(input: string) { + // Remove non-ASCII characters + // eslint-disable-next-line no-control-regex + input = input.replace(/[^\x00-\x7F]/g, ""); + if (input.length < 4) { + return false; + } + const regex = /^[0-9]+$/; + return regex.test(input); +}