diff --git a/Dalamud/Utility/StringExtensions.cs b/Dalamud/Utility/StringExtensions.cs index 2cfb55fc0..02dfdafbf 100644 --- a/Dalamud/Utility/StringExtensions.cs +++ b/Dalamud/Utility/StringExtensions.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Runtime.CompilerServices; namespace Dalamud.Utility; @@ -29,38 +30,17 @@ public static class StringExtensions /// The string to test. /// true if the value parameter is null or an empty string (""), or if value consists exclusively of white-space characters. public static bool IsNullOrWhitespace([NotNullWhen(false)] this string? value) => string.IsNullOrWhiteSpace(value); - + /// - /// Validate if character name is valid. - /// Both forename and surname must be between 2 and 15 characters and not total more than 20 characters combined. - /// Only letters, hyphens, and apostrophes can be used. - /// The first character of either name must be a letter. - /// Hyphens cannot be used in succession or placed immediately before or after apostrophes. + /// Validate if character name is valid using game check. /// /// character name to validate. + /// include legacy names (combined can be 30 instead of 20). /// indicator if character is name is valid. - public static bool IsValidCharacterName(this string value) + public static bool IsValidCharacterName(this string value, bool includeLegacy = true) { if (string.IsNullOrEmpty(value)) return false; - if (value.Length > 21) return false; // add 1 to allow for space - var names = value.Split(' '); - if (names.Length != 2) return false; - var forename = names[0]; - var surname = names[1]; - if (!IsValidName(forename)) return false; - if (!IsValidName(surname)) return false; - return true; - } - - private static bool IsValidName(string name) - { - if (name.Length is < 2 or > 15) return false; - if (name.Any(c => !char.IsLetter(c) && !c.Equals('\'') && !c.Equals('-'))) return false; - if (!char.IsLetter(name[0])) return false; - if (!char.IsUpper(name[0])) return false; - if (name.Contains("--")) return false; - if (name.Contains("\'-")) return false; - if (name.Contains("-\'")) return false; - return true; + if (!FFXIVClientStructs.FFXIV.Client.UI.UIModule.IsPlayerCharacterName(value)) return false; + return includeLegacy || value.Length <= 21; } }