2010-01-27 3 views
0

Voici ce que j'ai actuellement, mais cela ne fonctionne que si la décimale est précédée et suivie d'une décimale.Regex: Comment faire correspondre une décimale '.' si c'est suivi par ou précédé par (ou les deux) un nombre décimal ' d'

^\$?(\d*?(?<=\d)\.?(?=\d)\d*?)$ 

Ainsi la chaîne: '$50.00' matchs, mais '$.50' et '$50.' ne correspondent pas (je veux qu'ils)

Je veux récupérer la décimale adaptée comme '50 .00' dans un seul groupe si possible afin que je puisse saisir la valeur normalisée s'il y a correspondance.

+0

Hm, sont les $ et le point requir ed ou optionnel? – Lucero

+0

Les deux facultatifs, car quelqu'un peut mettre «50,00», ou juste «50» ou «50,00 $» ou seulement «50 $». – orokusaki

+0

N'est-ce pas vraiment une copie de votre autre question? –

Répondre

0
^\$?\s*((?=\d*\.|\d)\d*(?:\.\d*)?)$ 
+0

J'ai testé cela avec $ .1 et il ne correspondait pas. – orokusaki

+0

Modifié, essayez à nouveau s'il vous plaît. – Lucero

+0

Celui-ci l'a attrapé mais il ne correspondait pas à '1' parce que vous disiez regarder en avant pour voir si une décimale suit. – orokusaki

0

Err, qu'en est-

^\$?(\d*\.?\d*)$ 
+0

Cela ne correspondra à rien ou simplement '$' – Lucero

+0

1+ Le vôtre est en fait très utile aussi (fait exactement la même chose sauf que je ne veux pas de correspondance sur vide car j'élève des erreurs avant d'évaluer le résultat du groupe (1)). – orokusaki

2

Essayez ceci:

^\$?(\d+(?:\.\d*)?|\.\d+)$ 

Il correspondront:

^\$?   # an optional $ at the begin 
    (\d+   # one or more digits 
    (?:\.\d*)? # followed by an optional decimal part 
    |\.\d+  # or just decimal places without any leading digits 
)$ 
1
(?=^.*\d.*$)^(?:\$\s*)?(?:\d|,)*?\.?(?:\d?)*$ 

disallows: 
$ 
. 
$. 
<empty> 
<whitespace> 

allows: 
$50,000 
$500 
$0 
50,000 
500 
0 
.0 
.00000000000 
$50,000.000000 
$ 5. 
Questions connexes