diff --git a/web/src/constants/contactMethods.ts b/web/src/constants/contactMethods.ts index fd7794f..78c350c 100644 --- a/web/src/constants/contactMethods.ts +++ b/web/src/constants/contactMethods.ts @@ -30,14 +30,14 @@ export const { { type: 'email', label: 'Email', - matcher: /mailto:(.*)/, + matcher: /mailto:(.+)/, formatter: (value) => value, icon: 'ri:mail-line', }, { type: 'telephone', label: 'Telephone', - matcher: /tel:(.*)/, + matcher: /tel:(.+)/, formatter: (value) => { return parsePhoneNumberWithError(value).formatInternational() }, @@ -46,7 +46,7 @@ export const { { type: 'whatsapp', label: 'WhatsApp', - matcher: /https?:\/\/(?:www\.)?wa\.me\/(.*)?/, + matcher: /https?:\/\/(?:www\.)?wa\.me\/(.+)/, formatter: (value) => { return parsePhoneNumberWithError(value).formatInternational() }, @@ -55,42 +55,35 @@ export const { { type: 'telegram', label: 'Telegram', - matcher: /https?:\/\/(?:www\.)?t\.me\/(.*)?/, + matcher: /https?:\/\/(?:www\.)?t\.me\/(.+)/, formatter: (value) => `t.me/${value}`, icon: 'ri:telegram-line', }, { type: 'linkedin', label: 'LinkedIn', - matcher: /https?:\/\/(?:www\.)?linkedin\.com\/(?:in|company)\/(.*)?/, + matcher: /https?:\/\/(?:www\.)?linkedin\.com\/(?:in|company)\/(.+)/, formatter: (value) => `in/${value}`, icon: 'ri:linkedin-box-line', }, - { - type: 'website', - label: 'Website', - matcher: /https?:\/\/(?:www\.)?((?:[a-zA-Z0-9-]+\.)+[a-zA-Z]+)/, - formatter: (value) => value, - icon: 'ri:global-line', - }, { type: 'x', label: 'X', - matcher: /https?:\/\/(?:www\.)?x\.com\/(.*)?/, + matcher: /https?:\/\/(?:www\.)?x\.com\/(.+)/, formatter: (value) => `@${value}`, icon: 'ri:twitter-x-line', }, { type: 'instagram', label: 'Instagram', - matcher: /https?:\/\/(?:www\.)?instagram\.com\/(.*)?/, + matcher: /https?:\/\/(?:www\.)?instagram\.com\/(.+)/, formatter: (value) => `@${value}`, icon: 'ri:instagram-line', }, { type: 'matrix', label: 'Matrix', - matcher: /https?:\/\/(?:www\.)?matrix\.to\/#\/(.*)?/, + matcher: /https?:\/\/(?:www\.)?matrix\.to\/#\/(.+)/, formatter: (value) => value, icon: 'ri:hashtag', }, @@ -101,6 +94,14 @@ export const { formatter: () => 'BitcoinTalk', icon: 'ri:btc-line', }, + // Website must go last because it's a catch-all + { + type: 'website', + label: 'Website', + matcher: /https?:\/\/(?:www\.)?((?:[a-zA-Z0-9-]+\.)+[a-zA-Z]+)/, + formatter: (value) => value, + icon: 'ri:global-line', + }, ] as const satisfies ContactMethodInfo[] )