Appliquer la validation à un modèle dans MVC et aimerait le faire avec Regex.
Cherche à valider qu'un identifiant sur mon modèle est supérieur à 0 lors de la soumission.
Je ne sais pas en quoi MVC est pertinent, mais si votre identifiant est un entier, ce BRE devrait le faire:
^[1-9][0-9]*$
Si vous souhaitez faire correspondre des nombres réels (flottants) plutôt que des entiers, vous devez gérer la casse ci-dessus, ainsi que des nombres décimaux normaux (c.-à-d. 2.5
ou 3.3̅
), dans les cas où votre modèle est compris entre 0 et 1 (c.-à-d. 0.25
). au cas où votre modèle comporte une partie décimale égale à 0. (c.-à-d. 2.0
). Et pendant que nous y sommes, nous ajouterons un support pour les zéros non significatifs sur les entiers (à savoir 005
):
^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$
Notez que ce second est un RE étendu. La même chose peut être exprimée dans Basic RE, mais presque tout comprend ERE ces jours-ci. Décomposons l’expression en parties plus faciles à digérer.
^(
Le curseur correspond au caractère nul situé au début de la ligne. Ainsi, votre regex précédant votre regex est ancré au début de la ligne. La parenthèse ouvrante est là à cause de l’or-barre ci-dessous. Plus sur cela plus tard.
0*[1-9][0-9]*(\.[0-9]+)?
Cela correspond à tout nombre entier ou tout nombre à virgule flottante supérieur à 1. Ainsi, notre 2.0
serait apparié, mais 0.25
ne le serait pas. Le 0*
au début gère les zéros non significatifs, donc 005 == 5
.
|
Le caractère de pipe est un " ou une barre " dans ce contexte. Aux fins de l'évaluation de cette expression, elle a une priorité plus élevée que tout le reste et relie efficacement deux expressions régulières. Les parenthèses sont utilisées pour regrouper plusieurs expressions séparées par des barres obliques.
Et la deuxième partie:
0+\.[0-9]*[1-9][0-9]*
Cela correspond à tout numéro commençant par un ou plusieurs caractères 0
(remplacez +
par *
pour qu'il corresponde à zéro ou plus, c.-à-d. .25
), suivi d'un point, suivi d'une chaîne de chiffres qui en contient au moins un autre que 0
. Donc, cela correspond à tout ce qui se trouve au-dessus de 0
et au-dessous de 1
.
)$
Et enfin, nous fermons les parenthèses et ancrons l'expression régulière à la fin de la ligne avec le signe dollar, tout comme le curseur s'ancre au début de la ligne.
Bien sûr, si vous laissez votre langage de programmation évaluer quelque chose numériquement plutôt que d'essayer de le faire correspondre à une expression régulière, vous économiserez des maux de tête et CPU.
Qu'en est-il: ^[1-9][0-9]*$
Si vous ne voulez que des entiers non négatifs, essayez: ^\d+$
Je pense que la meilleure solution consiste à ajouter le signe + entre les deux crochets de l'expression rationnelle:
^[1-9]+[0-9]*$
Une autre solution:
^[1-9]\d*$
\d
équivalent à [0-9]
J'ai essayé celui-ci et cela a fonctionné pour moi pour tous les nombres décimaux/entiers supérieurs à zéro
Permet l'espace blanc: ^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
Pas d'espace blanc: ^(?=.*[1-9])\d*(?:\.\d{1,2})?$
Référence: Regex supérieur à zéro avec 2 décimales
voilà:
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");
sur soumettre:
if(myMatches.Count > 0)
{
//do whatever you want
}
Vous pouvez utiliser l'expression ci-dessous:
(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)
Entrées valides: 1 1. 1.1 1.0 tous les nombres réels positifs
Entrées invalides: tous les nombres réels négatifs et 0 et 0.0
La réponse simple est: ^[1-9][0-9]*$
Simplifié seulement pour 2 décimales.
^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$