2010-10-19 8 views
1

Je souhaite valider l'entrée d'une zone de texte afin qu'elle ne soit pas vide et n'accepte que les nombres décimaux ou entiers. J'ai essayé les années suivantes: regex? ^ \ S [0-9] , [0-9] $ celui-ci permet une lettre au débutExpression régulière en C#

^\ S [0-9] + ,? [0-9] * $ celui-ci n'admet pas les lettres, il nécessite au moins 2 chiffres qui ne sont pas souhaités.

merci beaucoup d'avance pour votre temps.

+1

S'il vous plaît, donner des exemples des valeurs que vous voulez transmettre et valorise t devrait échouer. Une partie de votre problème est parce que vous commencez par '\ S' qui est n'importe quel caractère autre qu'un espace – CaffGeek

+0

Et qu'en est-il des nombres négatifs? – CaffGeek

+0

Voir ma réponse ci-dessous qui permet positif, négatif et des virgules. Ce n'est pas parfait, mais plus proche – CaffGeek

Répondre

5
^\d+(\.\d+)?$ 

Commence par un chiffre, alors peut-être. plus de chiffres. Si vous souhaitez des nombres négatifs

^-?\d+(\.\d+)?$ 

Bien que peut-être plus facile et plus utile Double.TryParse.

+0

Qu'en est-il des négatifs? – CaffGeek

+0

@Chad - OP ne fait aucune mention de négatifs, et sa tentative de solution n'indique aucun désir de le faire. –

+1

@Joel Etherton, il a dit entier. Les entiers incluent les négatifs. – CaffGeek

0

Cela devrait fonctionner^\ d {1,}.? \ D {1}, $

+0

{1,} pourrait être simplifié en tant que + et cela ne permet pas d'entrer "1". –

+0

Malheureusement, cela ne fonctionne pas. Il faudra au moins deux chiffres. –

+0

vous voulez probablement échapper le '.', car il correspond à n'importe quel personnage en ce moment – CaffGeek

1

"^\d+(\.\d+)?$" devrait le faire. Cela correspond à une chaîne commençant par un ou plusieurs chiffres, puis éventuellement un point décimal et un ou plusieurs chiffres supplémentaires. Le point décimal et la partie décimale sont groupés donc si vous en avez un, vous avez aussi besoin de l'autre, mais vous ne pouvez en avoir aucun.

L'utilisation de \ S correspondra à tout caractère non-espace au début, ce qui n'est probablement pas ce que vous voulez.

3

Je vous recommande juste en utilisant un compare validator ...

<asp:CompareValidator id="Compare1" 
     ControlToValidate="TextBox1" 
     Operator="DataTypeCheck" 
     Type="Double" 
     runat="server"/> 

Il est conçu pour faire le genre de chose dont vous parlez sans déconner avec tout le ... regex

Je vais admettre je ne suis pas un fan de regex (sauf si vraiment nécessaire). Jetez un oeil à cet article:

Regular Expressions: Now You Have Two Problems

0

Cela permettra des nombres positifs ou négatifs, avec des virgules et des nombres décimaux.

Cependant, il ne garantit pas des virgules sont dans les bons endroits

^-?[\d,]+\.?\d*$

passant

  • 10.000
  • 10,000.00
  • -10
  • -10,000
  • -10,000.00

à défaut

  • A123
  • asdf
  • 123a

Mais pour être honnête, regex est la mauvaise solution pour ce