2017-07-28 2 views
0

Ich habe eine Regex, die Betrag in $ übereinstimmt.Wortgrenze funktioniert nicht für den Betrag in Dollar (REgex)

(\-?\$\-?[0-9]+\.?[0-9]*|usd\-?[0-9]+\.?[0-9]*|[0-9]+\.?[0-9]*\-?usd|[0-9]*\.?[0-9]*\$) 

Derzeit seine Anpassung für $ 250, USD250 etc, sollte es nicht die $ 250 in $ 250abchhh entsprechen.

Also versuchte ich Wortgrenze, aber es behob das Problem auch nicht, wie kann ich dieses Problem beheben?

passende Fälle sind

$456 
$45.6 
$.5 
$-45 
-$45 
usd-456 
usd46 
usd4.6 
usd.46 
1$ 
1.5$ 
.5$ 
-.5$ 
5usd 
456usd 

es nicht

entsprechen sollte
455$abc 
    abc$123 
    abcuds1 
    jhb$5665usdjnjnb 
    $usd1555 
    usd$768 
    $566usd 
    $5788usdbjhj 
+0

Aber Ihre Regex hat keine Probleme, über die Sie sprechen. Schau mal hier: https: //regex101.com/r/rAJLc0/6. Sie haben Probleme, wenn Sie sowohl $ als auch usd haben und mit Dezimalpunkt arbeiten. Was genau willst du lösen? "Aber es stimmt nur mit einem separaten Betrag überein." - Die Phrase hat keinen Sinn, sorry. – Gangnus

+0

entfernt diesen Satz –

+0

Es ist eine andere Frage als das angenommene Duplikat. Dass ein anderer fragt, wie man Dollarsummen einfacher liest. Dieser fragt, wie man die unerwünschten Teile der Linie abschneidet. – Gangnus

Antwort

0

Sie sollten auch eine korrekte Regex für eine Dezimalzahl schreiben. Und verwende^$ für Start und Ende der Zeile.

^\s*(?:(?:(?:-?(?:usd|\$)|(?:usd|\$)-)(?:(?:0|[1-9]\d*)?(?:\.\d+)?(?<=\d)))|(?:-?(?:(?:0|[1-9]\d*)?(?:\.\d+)?(?<=\d))(?:usd|\$)))\s*$ 

Schauen Sie here bei den Testergebnissen.