Пример #1
0
        /// <summary>
        ///     <para>
        ///         Utilizing lazy loading, inInitializes and returns <see cref="CharacterCasingChecks"/> containing a default set of <see cref="CharacterCasingCheck"/> objects; these objects are utilized when a CharacterCasingFormatting rule is applied to a property.
        ///     </para>
        ///     <para>
        ///         If the <see cref="CharacterCasingChecks.SetGetChecksSource"/> method has been called, this method will invoke the source argument each time this method is called.
        ///     </para>
        /// </summary>
        /// <returns>Returns <see cref="CharacterCasingChecks"/> containing a default set of <see cref="CharacterCasingCheck"/> objects.</returns>
        /// <remarks>
        ///     <para>
        ///         Developers you can use the returned value from this methods and add or remove checks. For example, you could load checks from a database, config file, web service, etc.
        ///     </para>
        ///     <para>
        ///         Developers you can also use the <see cref="CharacterCasingChecks.SetGetChecksSource"/> method to create an empty <see cref="CharacterCasingChecks"/> object and then populate it within your application. Note: this technique does not load up any default checks./>
        ///     </para>
        /// </remarks>
        public static CharacterCasingChecks GetChecks()
        {
            if (_getChecksSource != null)
            {
                return(_getChecksSource.Invoke());
            }

            if (_instance == null)
            {
                _instance = new CharacterCasingChecks();

                //TODO: Optionally load this from a data base, config file, web service, etc.
                //
                //You can also add, remove or edit these by modifying the CharacterCasingChecks collection from your application.
                //
                //These are values that are specific to your company or line of business
                //remove the ones that don't apply and add your own.
                //ensure that the lengths of the LookFor and the ReplaceWith strings are the same
                _instance.Add(new CharacterCasingCheck("Po Box", "PO Box"));
                _instance.Add(new CharacterCasingCheck("C/o ", "c/o "));
                _instance.Add(new CharacterCasingCheck("C/O ", "c/o "));
                _instance.Add(new CharacterCasingCheck("Vpn ", "VPN "));
                _instance.Add(new CharacterCasingCheck("Xp ", "XP "));
                _instance.Add(new CharacterCasingCheck(" Or ", " or "));
                _instance.Add(new CharacterCasingCheck(" And ", " and "));
                _instance.Add(new CharacterCasingCheck(" Nw ", " NW "));
                _instance.Add(new CharacterCasingCheck(" Ne ", " NE "));
                _instance.Add(new CharacterCasingCheck(" Sw ", " SW "));
                _instance.Add(new CharacterCasingCheck(" Se ", " SE "));
                _instance.Add(new CharacterCasingCheck(" Llc. ", " LLC. "));
                _instance.Add(new CharacterCasingCheck(" Llc ", " LLC "));
                _instance.Add(new CharacterCasingCheck(" Lc ", " LC "));
                _instance.Add(new CharacterCasingCheck(" Lc. ", " LC. "));
                _instance.Add(new CharacterCasingCheck("Us Bank ", "US Bank "));
                _instance.Add(new CharacterCasingCheck("Wpf", "WPF"));
            }

            return(_instance);
        }
Пример #2
0
        /// <summary>Corrects the text character casing and optionally format phone fields similar to Microsoft Outlook.</summary>
        /// <param name="inputString">String to be case corrected and optionally formatted.</param>
        /// <param name="characterCase">Character case and format.</param>
        /// <param name="phoneExtension">The phone extension.</param>
        /// <returns>String case corrected and optionally formatted.</returns>
        /// <exception cref="InvalidEnumArgumentException">Thrown when enum value characterCase is not defined.</exception>
        /// <exception cref="InvalidEnumArgumentException">Thrown when enum value phoneExtension is not defined.</exception>
        public static String ApplyCharacterCasing(String inputString, CharacterCasing characterCase, PhoneExtension phoneExtension = PhoneExtension.Keep)
        {
            if (!Enum.IsDefined(typeof(CharacterCasing), characterCase))
            {
                throw new InvalidEnumArgumentException(nameof(characterCase), (Int32)characterCase, typeof(CharacterCasing));
            }
            if (!Enum.IsDefined(typeof(PhoneExtension), phoneExtension))
            {
                throw new InvalidEnumArgumentException(nameof(phoneExtension), (Int32)phoneExtension, typeof(PhoneExtension));
            }

            inputString = inputString.Trim();

            if (inputString.Length == 0)
            {
                return(inputString);
            }

            Int32 intX;

            switch (characterCase)
            {
            case CharacterCasing.None:
                return(inputString);

            case CharacterCasing.LowerCase:
                return(inputString.ToLower());

            case CharacterCasing.UpperCase:
                return(inputString.ToUpper());

            case CharacterCasing.PhoneWithDashesNoProperName:
            case CharacterCasing.PhoneWithDotsNoProperName:
            case CharacterCasing.PhoneNoProperName:
                return(FormatOutLookPhone(inputString, characterCase, phoneExtension));

            case CharacterCasing.PhoneWithDashesUpper:
            case CharacterCasing.PhoneWithDotsUpper:
            case CharacterCasing.PhoneUpper:
                return(FormatOutLookPhone(inputString, characterCase, phoneExtension).ToUpper());
            }

            inputString = inputString.ToLower();

            String previous      = " ";
            String previousTwo   = "  ";
            String previousThree = "   ";
            String charString;

            for (intX = 0; intX < inputString.Length; intX++)
            {
                charString = inputString.Substring(intX, 1);

                if (Char.IsLetter(Convert.ToChar(charString)) && charString != charString.ToUpper())
                {
                    if (previous == " " || previous == "." || previous == "-" || previous == "/" || previousThree == " O'" || previousTwo == "Mc")
                    {
                        inputString = inputString.Remove(intX, 1);
                        inputString = inputString.Insert(intX, charString.ToUpper());
                        previous    = charString.ToUpper();
                    }
                    else
                    {
                        previous = charString;
                    }
                }
                else
                {
                    previous = charString;
                }

                previousTwo   = previousTwo.Substring(1, 1) + previous;
                previousThree = previousThree.Substring(1, 1) + previousThree.Substring(2, 1) + previous;
            }

            intX = inputString.IndexOf("'", StringComparison.Ordinal);

            if (intX == 1)
            {
                String insertString = inputString.Substring(2, 1).ToUpper();
                inputString = inputString.Remove(2, 1);
                inputString = inputString.Insert(2, insertString);
            }

            try {
                intX = inputString.IndexOf("'", 3, StringComparison.Ordinal);

                if (intX > 3 && inputString.Substring(intX - 2, 1) == " ")
                {
                    String insertString = inputString.Substring(intX + 1, 1).ToUpper();
                    inputString = inputString.Remove(intX + 1, 1);
                    inputString = inputString.Insert(intX + 1, insertString);
                }
            } catch {
            }

            //never remove this code
            inputString += " ";

            foreach (CharacterCasingCheck check in CharacterCasingChecks.GetChecks())
            {
                if (inputString.Contains(check.LookFor))
                {
                    Int32 foundIndex = inputString.IndexOf(check.LookFor, StringComparison.Ordinal);

                    if (foundIndex > -1)
                    {
                        inputString = inputString.Remove(foundIndex, check.LookFor.Length);
                        inputString = inputString.Insert(foundIndex, check.ReplaceWith);
                    }
                }
            }

            if (characterCase == CharacterCasing.PhoneProperName || characterCase == CharacterCasing.PhoneWithDashesProperName || characterCase == CharacterCasing.PhoneWithDotsProperName)
            {
                inputString = FormatOutLookPhone(inputString, characterCase, phoneExtension);
            }

            return(inputString.Trim());
        }