メールには非常に一般的で緩い正規表現が必要です。
電子メール文字列に@があることを検証する必要があります。
例えば:
- 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/ テスト文字列は有効であると表示されますが、この属性は変更を取得しません。