From 333340da3e3e8a7666ff21ac6d27ebbd1da3d8f5 Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Thu, 3 Oct 2024 16:36:01 +0200 Subject: [PATCH] Improve validation of ORCID IDs --- src/enums/MDNodaRepository.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/enums/MDNodaRepository.php b/src/enums/MDNodaRepository.php index 79ff287..31b18f9 100644 --- a/src/enums/MDNodaRepository.php +++ b/src/enums/MDNodaRepository.php @@ -531,6 +531,24 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable { } + /** + * Validates OrCID IDs. + * + * @param string $id ID to validate. + * + * @return string|false + */ + private static function validateOrcidId(string $id):string|false { + + $id = strtr(trim($id, '/'), [ + "http://orcid.org/" => "", + "https://orcid.org/" => "", + ]); + + return preg_match('/^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$/', $id) ? $id : false; + + } + /** * Validates a PIM ID, returning a string or false. * @@ -679,7 +697,7 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable { self::nomisma => str_replace('http://nomisma.org/id/', '', $id), self::npg => self::validateNpgId($id), self::oberbegriffsdatei => self::validateNumericId($id, ['https://term.museum-digital.de/oberbegriffsdatei/tag/']), - self::orcid => preg_match('/^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$/', $id) ? $id : false, + self::orcid => self::validateOrcidId($id), self::osm => self::validateNumericId($id, ['https://www.openstreetmap.org/relation/']), self::pim => self::validatePimId($id), self::pleiades => self::validateNumericId($id, ['https://pleiades.stoa.org/places/']),