Esempio n. 1
0
        private static string PreValidateHandling(string input, TelephoneOptions options)
        {
            if (options == null)
            {
                options = TelephoneOptions.Default;
            }

            input = TelephoneUtility.PreProcessingHandling(input, options);

            return(input);
        }
Esempio n. 2
0
        /// <summary>
        /// Validate a phone number in length and signature of against an inbound (local) phone number rules
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static bool PhoneNumberInboundValidation(string phoneNumber, TelephoneOptions options = null)
        {
            phoneNumber = PreValidateHandling(phoneNumber, options);

            if (phoneNumber.StartsWith("0") || phoneNumber.StartsWith("+"))
            {
                return(false);
            }

            return(PhoneNumberValidateLength(phoneNumber, options) && PhoneNumberValidateFormat(phoneNumber, options));
        }
Esempio n. 3
0
        /// <summary>
        /// Validate a phone number in length and signature of against an city phone number rules
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static bool PhoneNumberCityValidation(string phoneNumber, TelephoneOptions options = null)
        {
            phoneNumber = PreValidateHandling(phoneNumber, options);

            if (phoneNumber.Length < 2 || phoneNumber[0] != '0' || phoneNumber[1] == '0')
            {
                return(false);
            }

            return(PhoneNumberValidateLength(phoneNumber, options) && PhoneNumberValidateFormat(phoneNumber, options));
        }
Esempio n. 4
0
        /// <summary>
        /// Validates only the total length of the phone number
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static bool PhoneNumberValidateLength(string phoneNumber, TelephoneOptions options = null)
        {
            phoneNumber = PreValidateHandling(phoneNumber, options);

            var normalized = TelephoneNormalizer.ToPhoneNumberNormalization(phoneNumber, options);

            if (normalized.Length < MinimumPhoneNumberLength || normalized.Length > MaximumPhoneNumberLength)
            {
                return(false);
            }
            return(true);
        }
Esempio n. 5
0
        internal static string PreProcessingHandling(string input, TelephoneOptions options)
        {
            if (options == null)
            {
                options = TelephoneOptions.Default;
            }

            if (!options.ProcessNaturalCharacterOnly)
            {
                input = ToNaturalCharset(input);
                // Stop this process from occured again on nested validations
                options.ProcessNaturalCharacterOnly = true;
            }

            return(input);
        }
Esempio n. 6
0
        /// <summary>
        /// Validations only the signatures of the phone number
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static bool PhoneNumberValidateFormat(string phoneNumber, TelephoneOptions options = null)
        {
            phoneNumber = PreValidateHandling(phoneNumber, options);

            if (!TelephoneUtility.CheckOpenCloseCharacter(phoneNumber, new List <OpenClose>
            {
                new OpenClose('(', ')'),
                new OpenClose('[', ']')
            }))
            {
                return(false);
            }

            if (RegexPhoneNumberBelow3Digit.IsMatch(phoneNumber))
            {
                return(true);
            }

            return(RegexPhoneNumber.IsMatch(phoneNumber));
        }
Esempio n. 7
0
        /// <summary>
        /// Validates phone number in length and signatures regardless that if the phone number is local, city or international number
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static bool PhoneNumberValidate(string phoneNumber, TelephoneOptions options = null)
        {
            phoneNumber = PreValidateHandling(phoneNumber, options);

            return(PhoneNumberValidateFormat(phoneNumber, options) && PhoneNumberValidateLength(phoneNumber, options));
        }
Esempio n. 8
0
        public static string ToPhoneNumberNormalization(string phoneNumber, TelephoneOptions options = null, string defaultI18nStart = "+")
        {
            phoneNumber = PreNormalizationHandling(phoneNumber, options);

            if (defaultI18nStart != "+" && defaultI18nStart != "00")
            {
                throw new ArgumentOutOfRangeException(nameof(defaultI18nStart), defaultI18nStart, "parameter can only contains value of '+' or '00'");
            }

            if (phoneNumber == null)
            {
                return(null);
            }

            var digitOnly = DigitOnlyRegex.Replace(phoneNumber, "").Trim();

            // var digitOnly = Regex.Replace(phoneNumber, @"[^\d]", "").Trim(); // TODO: Performance Monitor

            #region Exceptional Normalizer
            if (IsExceptionalPhoneNumber(out var exception, phoneNumber))
            {
                if (exception.CustomNormalizer != null)
                {
                    return(exception.CustomNormalizer(phoneNumber));
                }

                #region International Prefix
                if (phoneNumber.Trim().StartsWith("+"))
                {
                    return((defaultI18nStart == "+" ? "+" : exception.InternationalPrefixes[0]) + digitOnly);
                }

                foreach (var intPrefix in exception.InternationalPrefixes)
                {
                    if (digitOnly.StartsWith(intPrefix))
                    {
                        if (digitOnly.Length > intPrefix.Length)
                        {
                            return((defaultI18nStart == "+" ? "+" : intPrefix) + digitOnly.Substring(intPrefix.Length));
                        }
                    }
                }
                #endregion International Prefix

                return(digitOnly); // National Prefix & No Prefix
            }
            #endregion Exceptional Normalizer

            #region Default Normalizer (ITU-T Recommendation)

            if (phoneNumber.Trim().StartsWith("+"))
            {
                return(defaultI18nStart + digitOnly);
            }

            if (digitOnly.StartsWith("00"))
            {
                if (digitOnly.Length > 2)
                {
                    return(defaultI18nStart + digitOnly.Substring(2));
                }
                return(defaultI18nStart);
            }

            #endregion Default Normalizer (ITU-T Recommendation)

            //Other 09132198895, 5553254
            return(digitOnly); // National Prefix & No Prefix
        }