在c#中,如果ISBN有效且货币有效,则检查入方法的问题



所以,我在验证货币和验证isbn号的实现方法上遇到了问题。我给出下面我的代码与总结描述。我相信有人能帮助我并解释我做错了什么。货币ISO验证

        /// <summary>
        /// Determines whether a specified string is a valid ISO currency symbol.
        /// </summary>
        /// <param name="currency">Currency string to check.</param>
        /// <returns>
        /// <see langword="true"/> if <paramref name="currency"/> is a valid ISO currency 
         symbol; <see langword="false"/> otherwise.
        /// </returns>
        /// <exception cref="ArgumentNullException">Thrown if currency is null.</exception>
        public static bool IsValid(string? currency)
        {
            if (currency == null)
            {
                throw new ArgumentNullException(nameof(currency));
            }
            Regex regex = new Regex(@"^d*.?d?d?$");
            bool y = regex.IsMatch(currency);
            return y;
        }

ISBN号验证

        /// <summary>
        /// Verifies if the string representation of number is a valid ISBN-10 or ISBN-13 
         identification number of book.
        /// </summary>
        /// <param name="isbn">The string representation of book's isbn.</param>
        /// <returns>true if number is a valid ISBN-10 or ISBN-13 identification number of 
        book, false otherwise.</returns>
        /// <exception cref="ArgumentNullException">Thrown if isbn is null.</exception>
        public static bool IsValid(string? isbn)
        {
            if (isbn == null)
            {
                throw new ArgumentNullException(nameof(isbn));
            }
            int n = isbn.Length;
            if (n != 10)
            {
                return false;
            }
            int sum = 0;
            for (int i = 0; i < 9; i++)
            {
                int digit = isbn[i] - '0';
                if (digit < 0 || digit > 9)
                {
                    return false;
                }
                sum += digit * (10 - i);
            }
            char last = isbn[9];
            if (last != 'X' && (last < '0'
                             || last > '9'))
            {
                return false;
            }
            sum += (last == 'X') ? 10 :
                              (last - '0');
            return sum % 11 == 0;
        }
如果你能帮助我,我会很感激的。我不能决定它将是更好的解决使用正则表达式或不同的方法更复杂。我的解决方案不够好,所以我相信一些帮助或解释。

首先,你的方法都有相同的签名,因此在编译器看来是相同的,即使它们在相同的类/结构/记录中实现时,它们的参数名称不同。我建议给它们起更具体的名字,比如ValidCurrencyStringValidISBN

你也可能想要考虑不使用可空参数(因为你显然是在#nullable上下文中),除非严格必要。

我理解你试图用你的方法来验证货币字符串,但它可能是最好的看看答案完全相同的问题,因为它是相当不必要的再写正则表达式。

public static bool ValidCurrencyString(string? str)
{
    // If it is null, then it is not a valid string.
    if (str is null) return false;
    // Replace pattern with whichever regex suits you.
    return Regex.IsMatch(str, pattern);
}

或者(最有可能)更好地提供启用#nullable:

public static bool ValidCurrencyString(string str) => Regex.IsMatch(str, pattern);

验证ISBN不那么容易,但您可以(并且可能应该)也使用其他人已经编写的正则表达式。如果你决定这样做,这个方法也基本上看起来像ValidCurrencyString加上另一个正则表达式。

相关内容

  • 没有找到相关文章

最新更新