Czy możliwe jest użycie DataAnnotations ASP.NET MVC 2, aby dopuszczać tylko znaki (bez numeru), a nawet udostępniać białą listę dozwolonych łańcuchów? Przykład?DataAnnotations - Disallow Numbers lub zezwalaj tylko na podane ciągi znaków
12
A
Odpowiedz
27
Użyj RegularExpressionAttribute.
Coś
[RegularExpression("^[a-zA-Z ]*$")]
pasowałby a-z dużych i małych liter i spacji.
Biała lista będzie wyglądać następująco
[RegularExpression("white|list")]
co powinno pozwolić „białe” i „lista”
[RegularExpression("^\D*$")]
\ D reprezentuje znaki spoza numerycznych więc powyższe powinno pozwolić ciąg z tylko wszystko oprócz 0-9.
wyrażenia regularne są trudne, ale istnieje kilka przydatnych narzędzi do badania on-line takich jak: http://gskinner.com/RegExr/
3
Tak. Użyj „[wyrażenie regularne]”
tę wielką witryny wyrażeń regularnych http://www.regexlib.com/CheatSheet.aspx
1
Możesz napisać własny walidator, który ma lepszą wydajność niż wyrażenie regularne.
Tutaj napisałem białej listy walidator dla własności int:
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)}";
}
}
}
próbki Zastosowanie:
[WhiteList(2, 4, 5, 6)]
public int Number { get; set; }
Powiązane problemy
- 1. Zezwalaj tylko na Google CSE i nie zezwalaj na wyszukiwanie standardowe Google w ROBOTS.txt
- 2. Zezwalaj na puste ciągi dla pól oznaczonych jako PhoneAttribute lub UrlAttribute
- 3. Swift - Zezwalaj na rotację tylko na iPadzie
- 4. Zezwalaj tylko niektórym domenom na ładowanie iFrame
- 5. DataAnnotations lub Application Validation block
- 6. Zezwalaj tylko na jedną instancję aplikacji
- 7. Wyrzucanie śmieci i ciągi znaków
- 8. Operator tożsamości JavaScript na ciągi znaków
- 9. Zezwalaj tylko na znaki alfanumeryczne w polu tekstowym
- 10. Python expandtabs Operacja na ciągi znaków
- 11. Wyrażenia regularne, zezwalaj tylko na określony format. "John-doe"
- 12. Disallow mieszanka specyficznych cech
- 13. connection.select_value zwraca tylko ciągi znaków w postgres z pg gem
- 14. Jak usunąć tylko niektóre ciągi znaków z ciągu?
- 15. Jak interpolować ciągi znaków?
- 16. Jak zamienić ciągi znaków na javascript?
- 17. Fuzzy Matching Numbers
- 18. rozpakuj ciągi znaków w javascript
- 19. iPhone - zezwalaj na orientację poziomą tylko na jednym kontrolerze widoku
- 20. Zezwalaj tylko na jedną wartość na jeden klawisz naciśnij
- 21. Podane zależności mogą być tylko słojami.
- 22. Szablony i stałe ciągi znaków
- 23. Usuń ciągi znaków z TStringList
- 24. Ta instrukcja if nie powinna wykrywać 0; tylko puste lub puste ciągi znaków
- 25. DHL Sample Tracking numbers
- 26. Zmień sposób pobierania :: property_tree tłumaczy ciągi znaków na bool
- 27. Tokenizing ciągi znaków w C
- 28. Jednostki testujące zlokalizowane ciągi znaków
- 29. Resharper zlokalizuj złożone ciągi znaków
- 30. sed/awk skapitalizować ciągi znaków