0

メールには非常に一般的で緩い正規表現が必要です。

電子メール文字列に@があることを検証する必要があります。

例えば:

  • a @a=有効
  • a。@___asdsadc=有効
  • aaaaa@sdsdc.com=有効
  • ssdsadsadassd=無効

私は現在ここまで来ました:

public class EmailAttribute : RegularExpressionAttribute, IClientValidatable
{
    public EmailAttribute()
        //: base("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-_]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-_]*[A-Za-z0-9])?")
        : base(".*@.*")
    {
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var errorMessage = FormatErrorMessage(metadata.GetDisplayName());

        yield return new EmailValidationRule(errorMessage);
    }
}

public class EmailValidationRule : ModelClientValidationRule
{
    public EmailValidationRule(string errorMessage)
    {
        ErrorMessage = errorMessage;
        ValidationType = "email";
    }
}

したがって、最初のものはきつすぎて、2番目のものは正しい値を返さないようです-私はまだ私の文字列が無効であると言われています。

正規表現が間違っているからですか?validatorTypeは"email"であるため、このバリデーターは他のバリデーターと同じではない可能性があります。したがって、目立たないバリデーターとして登録しなくても機能します。

適切な正規表現である必要はありません。@記号が付いている限り、何でも検証できる必要があります。

このサイトを使用して正規表現を検証しました:http://gskinner.com/RegExr/ テスト文字列は有効であると表示されますが、この属性は変更を取得しません。

4

2 に答える 2

0

これを使って:

^[^@]+@[^@]+$

^$文字列の最初と最後に固定し、文字列全体が一致する必要があります。アンカーがなければ@@@@foo@bar、正規表現はそのfoo@bar部分と一致する可能性があります。

[^@]+ではない1つ以上の文字に一致し、文字列に@1つしかないことを@確認し、の両側に少なくとも1つの文字があることを確認し@ます。

于 2013-03-08T10:14:33.090 に答える
0

私はあなたのコードがどのように機能するかを正確に理解していません、そして多分あなたの欠点がそこにあるのなら、RegExパターンはあなたが逃げなければならない予約文字であると^.*\@{1}.*$ 私が思うのと同じくらい単純でなければなりません。@

于 2013-03-08T10:14:41.013 に答える