/// <summary>
        /// This method is used to check whether a string meets certain validation rules. It can also autofix it and report it to the user.
        /// </summary>
        /// <param name="target">The string to check</param>
        /// <param name="scope">The context that describes the target (i.e Name)</param>
        /// <param name="allowDigits">Whether the string is allowed to contain numbers</param>
        /// <param name="allowEmpty">Whether the string can be empty</param>
        /// <param name="max">The maximum number of characteers.Including whitespace.</param>
        /// <param name="min">The minimum number of characteers.Including whitespace.</param>
        /// <param name="autoFix">If true , automatically fix the string (remove digits , remove character over the max limit)</param>
        /// <param name="fixTarget">The holder of the target.</param>
        /// <param name="autoNotify">Whether the method should display the errors found to the user. See ValidatorResponse.NotifyUser()</param>
        /// <param name="fileName">Whether the method should check if the string is a valid file path </param>
        /// <returns></returns>
        public static ValidatorResponse isStringValid(
            string target, string scope, bool allowDigits, bool allowEmpty, int max = int.MaxValue,
            int min = int.MinValue, bool autoFix = false, TextBox fixTarget = null, bool autoNotify = false, bool fileName = false)
        {
            var errors = new List <string>();

            if (target.Length > max)
            {
                errors.Add("The " + scope + " should be less than " + max + " characters.");
            }
            if (target.Length < min)
            {
                errors.Add("The " + scope + " should be more than " + max + " characters.");
            }
            if (!allowDigits)
            {
                if (target.ToCharArray().Any(char.IsDigit))
                {
                    errors.Add("The " + scope + " should not contain any numbers");
                }
            }
            if (!allowEmpty)
            {
                if (target == "")
                {
                    errors.Add("The " + scope + " can't be empty");
                }
            }
            if (fileName)
            {
                errors.AddRange(from char c in target
                                from k in System.IO.Path.GetInvalidFileNameChars()
                                where c == k select
                                "Character " + c + " is invalid.");
            }

            var response = new ValidatorResponse {
                isValid = (errors.Count == 0), Errors = errors
            };

            if (autoNotify)
            {
                response.NotifyUser();
            }
            if (autoFix && fixTarget != null)
            {
                if (target.Length > max)
                {
                    fixTarget.Text = fixTarget.Text.Substring(0, max);
                }
                if (!allowDigits)
                {
                    if (target.ToCharArray().Any(char.IsDigit))
                    {
                        fixTarget.Text = new string(target.ToCharArray().Where(x => !char.IsDigit(x)).ToArray());
                    }
                }
                // if (!allowEmpty) fixTarget.Text = "Enter a "+scope;
            }
            return(response);
        }