/// <summary> /// Casts the enumeration value of known types into the matching character set. /// </summary> /// <returns></returns> public static LexicalCharacterSet ToCharacterSet(this LexicalCharacterSetType knownType) { switch (knownType) { case LexicalCharacterSetType.Numeric: return(LexicalCharacterSet.Numeric); case LexicalCharacterSetType.AsciiAlpha: return(LexicalCharacterSet.AsciiAlpha); case LexicalCharacterSetType.AsciiAlphaNumeric: case LexicalCharacterSetType.AsciiAuto: return(LexicalCharacterSet.AsciiAlphaNumeric); default: throw new ArgumentException(String.Format("LexicalCharacterSetType '{0}' cannot be converted directly to a character set.", knownType)); } }
/// <summary> /// Casts the enumeration value of known types into the matching character set. /// </summary> /// <returns></returns> public static LexicalCharacterSet ToCharacterSet(this LexicalCharacterSetType knownType, String matching, bool ignoreCase) { var chars = matching.ToCharArray().ToList(); if (knownType == LexicalCharacterSetType.Numeric) { if (chars.All(value => LexicalCharacterSet.Numeric.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.Numeric); } throw new ArgumentException( "The source string contains characters not available in the specified lexical character set."); } if (knownType == LexicalCharacterSetType.AsciiAlpha) { if (ignoreCase && chars.All(value => LexicalCharacterSet.AsciiAlphaUpper.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.AsciiAlphaUpper); } if (ignoreCase && chars.All(value => LexicalCharacterSet.AsciiAlphaLower.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.AsciiAlphaLower); } if (chars.All(value => LexicalCharacterSet.AsciiAlpha.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.AsciiAlpha); } throw new ArgumentException( "The source string contains characters not available in the specified lexical character set."); } if (knownType == LexicalCharacterSetType.AsciiAlphaNumeric) { if (ignoreCase && chars.All(value => LexicalCharacterSet.AsciiAlphaNumericUpper.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.AsciiAlphaNumericUpper); } if (ignoreCase && chars.All(value => LexicalCharacterSet.AsciiAlphaNumericLower.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.AsciiAlphaNumericLower); } if (chars.All(value => LexicalCharacterSet.AsciiAlphaNumeric.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(LexicalCharacterSet.AsciiAlphaNumeric); } throw new ArgumentException( "The source string contains characters not available in the specified lexical character set."); } foreach (var charSet in LexicalCharacterSet.KnownCharacterSets) { //only allow pick of 'upper' and 'lower' case character sets if ignore case is set if (!ignoreCase && !charSet.IsCaseSensitive && charSet.Characters.Any(char.IsLetter)) { continue; } if (chars.All(value => charSet.Characters.Contains(value) || char.IsWhiteSpace(value))) { return(charSet); } } throw new ArgumentException( "The source string contains characters not available in any known (pre-defined) lexical character set."); }