1

私は新しい C# 開発者で、初めて正規表現を使用しています。単純なプロジェクトの検証クラスを開発しているので、正規表現を使用して、ユーザーが入力した日付を検証するメソッドを開発しています。日付の形式は MM/DD/YYYY のみです。メソッドを開発しましたが、検証が正しくなく、その理由がわかりません。

C# 正規表現メソッドのコードは次のとおりです。

public bool ValidateDate(string dateInput)
    {
        Regex datePattern = new Regex("^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$"); 
        return !datePattern.IsMatch(dateInput);
    }

次に、ASP.NET に次の TextBox があるため:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

コード ビハインド:

protected void Button1_Click(object sender, EventArgs e)
    {
        Validator validator = new Validator();
        if (TextBox1.Text.ToString() != "")
        {
            if (validator.ValidateDate(TextBox1.Text.ToString()))
            {
                lblMessage.Text = "Correct";
            }
            else
            {
                lblMessage.Text = "Incorrect";
            }
        }
        else
        {
            lblMessage.Text = "Please enter a text";
        }
    }

このテキストボックスで検証メソッドを使用しようとすると、間違った結果が返されました。たとえば、2013 年 11 月 10 日と入力すると、正しくありません。しかし、2013/11/10に入ると正解になり、理由がわかりません

この検証方法の修正/変更を手伝っていただけませんか?

4

3 に答える 3

6

DateTime.TryParseExactこの目的のために専用のメソッドを使用します。

public bool ValidateDate(string dateInput)
{
    DateTime dt;
    return DateTime.TryParseExact(dateInput, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
}
于 2013-11-10T19:52:36.053 に答える
2

これには正規表現を使用する必要はありません。メソッドを使用できますDateTime.ParseExact

したがって、あなたの方法は次のようになります。

public bool ValidateDate(string dateInput)
{
    try 
    {
        DateTime.ParseExact(dateInput, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        return true;
    }
    catch (FormatException) 
    {
        return false;
    }
}
于 2013-11-10T19:50:12.153 に答える
0

これが機能するかどうかはわかりませんが、"^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1] の前に「@」を追加してみてください。 -9])/[0-9]{4}$". 通常はエスケープする必要がある文字をエスケープせずに済むように、逐語的な文字列リテラルになると確信しています。

public bool ValidateDate(string dateInput)
{
    Regex datePattern = new Regex(@"^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$"); 
    return !datePattern.IsMatch(dateInput);
}

詳細: http://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

于 2013-11-10T20:03:09.410 に答える