Ist es möglich, die DataAnnotations von ASP.NET MVC 2 nur für Zeichen (keine Zahl) zu verwenden oder sogar eine Whitelist zulässiger Zeichenfolgen bereitzustellen? Beispiel?DataAnnotations - Nummern nicht zulassen oder nur bestimmte Zeichenfolgen zulassen
12
A
Antwort
27
Verwenden Sie die RegularExpressionAttribute.
Etwas wie
[RegularExpression("^[a-zA-Z ]*$")]
würde a-z Groß- und Kleinschreibung und Zwischenräume entsprechen.
Eine weiße Liste würde in etwa so aussehen
[RegularExpression("white|list")]
die nur sollte „white“ und „Liste“
[RegularExpression("^\D*$")]
\ D für nicht numerische Zeichen erlauben, so dass die oben sollte mit einer Schnur erlauben alles außer 0-9.
Reguläre Ausdrücke sind schwierig, aber es gibt einige hilfreiche Test-Tools Online wie: http://gskinner.com/RegExr/
3
Ja. Verwenden Sie „[RegulaererAusdruck]“
dies eine große Website auf Regulärer Ausdruck http://www.regexlib.com/CheatSheet.aspx
1
Sie können Ihre eigenen Validator schreiben, die eine bessere Leistung als ein regulärer Ausdruck hat.
Hier schrieb ich einen Whitelist-Validator für int Eigenschaften:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace Utils
{
/// <summary>
/// Define an attribute that validate a property againts a white list
/// Note that currently it only supports int type
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
sealed public class WhiteListAttribute : ValidationAttribute
{
/// <summary>
/// The White List
/// </summary>
public IEnumerable<int> WhiteList
{
get;
}
/// <summary>
/// The only constructor
/// </summary>
/// <param name="whiteList"></param>
public WhiteListAttribute(params int[] whiteList)
{
WhiteList = new List<int>(whiteList);
}
/// <summary>
/// Validation occurs here
/// </summary>
/// <param name="value">Value to be validate</param>
/// <returns></returns>
public override bool IsValid(object value)
{
return WhiteList.Contains((int)value);
}
/// <summary>
/// Get the proper error message
/// </summary>
/// <param name="name">Name of the property that has error</param>
/// <returns></returns>
public override string FormatErrorMessage(string name)
{
return $"{name} must have one of these values: {String.Join(",", WhiteList)}";
}
}
}
Beispiel zu verwenden:
[WhiteList(2, 4, 5, 6)]
public int Number { get; set; }