it-swarm.com.de

Durch die MVC-Validierung wird RegularExpression nur für Zeichenfolgenfelder numerisch

Ich habe die folgende Eigenschaft in meinem Ansichtsmodell:

[Required]
[MaxLength(12)]
[MinLength(1)]
[RegularExpression("[^0-9]", ErrorMessage = "UPRN must be numeric")]
public string Uprn { get; set; }    

Unabhängig davon, ob Uprn ein string ist, möchte ich einen Validierungsfehler auslösen, wenn in das Feld Uprn auf der Seite submit etwas anderes als Zahlen eingegeben werden.

Mit dem oben genannten erhalte ich die Fehlermeldung "UPRN muss numerisch sein", unabhängig davon, ob es sich um eine Zeichenfolge oder eine Ganzzahl handelt

Was ist hier los?

25
JsonStatham

Der reguläre Ausdruck ist falsch. Ersetzen Sie es durch:

[Required]
[MaxLength(12)]
[MinLength(1)]
[RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")]
public string Uprn { get; set; }    

Vergiss nicht:

@Scripts.Render("~/bundles/jqueryval")

ihrer Ansicht nach für die JQuery-Validierung

40
Jimmyt1988

Oder Sie können die Längenvalidierung im regulären Ausdruck durchführen:

[Required]
[RegularExpression("^[0-9]{1,12}$", ErrorMessage = "...")]
public string Uprn { get; set; }

Hier ist der Regex visualisiert:

Regular expression visualization

Debuggex Demo

6
codeape

Die RegEx sollte ^[0-9]*$ Sein.

I.E.

Die Eigenschaft sollte wie folgt aussehen:

[Required]
[MaxLength(12)]
[MinLength(1)]
[RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")]
public string Uprn { get; set; }

Siehe working Beispiel .


Ich bin mir sicher, dass Sie bereits auf jQuery verwiesen haben, aber stellen Sie sicher, dass jQuery-Überprüfungs- und Microsoft-Überprüfungsskripts enthalten sind.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>

<script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script>
3
Ashley Medway

Ich schlage vor, Sie verwenden entweder:

[RegularExpression("\d*", ErrorMessage = "UPRN must be numeric")]

* Beachten Sie, dass das Feld leer ist, wenn Sie [Erforderlich] und [MinLength (1)] entfernen.

oder verwenden Sie die folgenden:

[RegularExpression("\d+", ErrorMessage = "UPRN must be numeric")]

das akzeptiert nur eine weitere Ziffer

sie können Ihre regulären Ausdrücke hier testen: https://regex101.com/

2
Techy