diff --git a/src/Handler/Utils/Profile.hs b/src/Handler/Utils/Profile.hs index ca272d6b8..b115e33d8 100644 --- a/src/Handler/Utils/Profile.hs +++ b/src/Handler/Utils/Profile.hs @@ -19,17 +19,20 @@ validDisplayName :: Maybe UserTitle validDisplayName (fmap Text.strip -> mTitle) (Text.strip -> fName) (Text.strip -> sName) (Text.strip -> dName) = and [ dNameFrags `MultiSet.isSubsetOf` MultiSet.unions [titleFrags, fNameFrags, sNameFrags] , sName `Text.isInfixOf` dName - , all ((<= 1) . Text.length) . filter (Text.any Char.isSpace) $ Text.groupBy ((==) `on` Char.isSpace) dName + , all ((<= 1) . Text.length) . filter (Text.any isAdd) $ Text.group dName , dNameLetters `Set.isSubsetOf` Set.unions [titleLetters, fNameLetters, sNameLetters, addLetters] ] where titleFrags = MultiSet.fromList $ maybe [] Text.words mTitle fNameFrags = MultiSet.fromList $ Text.words fName sNameFrags = MultiSet.fromList $ Text.words sName - dNameFrags = MultiSet.fromList $ Text.words dName + dNameFrags = MultiSet.fromList $ stripAdd <$> Text.words dName titleLetters = Set.fromList $ maybe [] unpack mTitle fNameLetters = Set.fromList $ unpack fName sNameLetters = Set.fromList $ unpack sName dNameLetters = Set.fromList $ unpack dName - addLetters = Set.fromList [' '] + addLetters = Set.fromList [' ', ',', '.'] + + isAdd = (`Set.member` addLetters) + stripAdd = Text.dropWhileEnd isAdd -- ? Text.dropAround isAdd \ No newline at end of file diff --git a/src/Utils.hs b/src/Utils.hs index f772d155d..5ff061458 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -269,7 +269,8 @@ addAttrsClass cl attrs = ("class", cl') : noClAttrs -- tickmark :: IsString a => a -- tickmark = fromString "✔" --- | remove all Whitespace from Text +-- | remove all whitespace from Text +-- whereas Text.strip only removes leading and trailing whitespace stripAll :: Text -> Text stripAll = Text.filter (not . isSpace) diff --git a/templates/i18n/profile/displayNameRules/de-de-formal.hamlet b/templates/i18n/profile/displayNameRules/de-de-formal.hamlet index 733c0baab..7be903a79 100644 --- a/templates/i18n/profile/displayNameRules/de-de-formal.hamlet +++ b/templates/i18n/profile/displayNameRules/de-de-formal.hamlet @@ -5,5 +5,5 @@ $newline never
  • Der angezeigte Name muss vollständig aus Fragmenten des akademischen Titels („#{title}“), des Vornamens („#{userFirstName}“) und des Nachnamens („#{userSurname}“) bestehen. $nothing
  • Der angezeigte Name muss vollständig aus Fragmenten des Vornamens („#{userFirstName}“) und des Nachnamens („#{userSurname}“) bestehen. -
  • Der angezeigte Name darf keine mehrfachen Leerzeichen enthalten. -
  • Der angezeigter Name darf keine Sonderzeichen enthalten, die in keinem der Namensbestandteile vorkommen. +
  • Der angezeigte Name darf keine mehrfachen Leerzeichen, Kommata oder Punkte enthalten. +
  • Der angezeigte Name darf keine Sonderzeichen außer Komma und Punkt enthalten, die in keinem der Namensbestandteile vorkommen. diff --git a/templates/i18n/profile/displayNameRules/en-eu.hamlet b/templates/i18n/profile/displayNameRules/en-eu.hamlet index 49da8bd7e..bcc8c7795 100644 --- a/templates/i18n/profile/displayNameRules/en-eu.hamlet +++ b/templates/i18n/profile/displayNameRules/en-eu.hamlet @@ -5,5 +5,5 @@ $newline never
  • The display name needs to consist entirely of fragments of the title (“#{title}”), the given name (“#{userFirstName}”), and the surname (“#{userSurname}”). $nothing
  • The display name needs to consist entirely of fragments of the given name (“#{userFirstName}”), and the surname (“#{userSurname}”). -
  • The display name may not contain clusters of multiple whitespace characters. -
  • The display name may not contain any special characters that do not occur in any part of the name. +
  • The display name may not contain clusters of multiple whitespace or punctuation characters. +
  • The display name may not contain any special characters that do not occur in any part of the name, apart from dot and comma.