2016-11-08 3 views
-2

Ich bin schrecklich bei RegEx. Kann jemand einen Regex zeigen, um zu verwenden, wenn ich eine Zeichenkette für alles überprüfen möchte ABER Ziffern 0-9, Dezimalpunkt und Prozentzeichen?RegEx, um alles zu entsprechen ABER Dezimalzahlen mit Prozentzeichen

ich das versucht habe ...

if (preg_match('/[^0-9.]+%/i', $string)) { 
    echo 'invalid'; 
} 

aber es ist nicht richtig funktioniert. Ich habe ein Eingabefeld, das einen Benutzer fragt, was der Steuersatz sein sollte, und dies wird bestätigen, dass sie einen gültigen Steuersatz eingegeben haben. Ich möchte, dass sie es wie "5,2%" anstatt in Dezimal eingeben, und ich werde die Mathematik auf dem Back-End tun.

A VALID Spiel würde „6%“ oder „5,2%“ usw. A INVALID Spiel können sein sei „2“ oder „0,05“ oder „A“

+0

Warum liegt der Prozentsatz außerhalb der Klammern? – Barmar

+0

warum die down votes? Ist das keine "akzeptable" Frage? – Phil

+0

Sie brauchen kein '+', wenn Sie nur auf das Vorhandensein von etwas testen. Ein einzelnes Zeichen Match ist genug. – Barmar

Antwort

1

Suchen sie nach einem gültigen Spiel, invertieren es dann im Test:

if (!preg_match('/[\d.]%/', $string) { 
    echo 'invalid'; 
} 

Aber da es sich hierbei um die gesamte Zeichenfolge zu testen, schauen nicht nur für einen bestimmten Prozentsatz überall drin, müssen Sie es zu verankern:

if (!preg_match('/^[\d.]+%$/', $string) { 
    echo 'invalid'; 
} 

Beachten Sie, dass dies so etwas wie .% ermöglichen. Sie sollten wahrscheinlich so etwas wie Regular expression to match numbers with or without commas and decimals in text verwenden, um den Zahlenteil zu finden.

+0

danke - wird als richtig akzeptieren, sobald es mich lässt. – Phil

+1

@anubhava Nein, deshalb habe ich vorgeschlagen, '[\ d.]' Durch die Antwort in dieser anderen Frage zu ersetzen, weil sie ungültig sein sollte. – Barmar

1

Sie gültige Eingabe passen und umgekehrt Ihre wenn Bedingung:

if (preg_match('/\b\d*\.?\d+%/', $string) === FALSE) { 
    echo 'invalid'; 
} 

RegEx Demo

+0

danke !!! Ihr Beitrag war sehr hilfreich, aber um fair zu sein, Barmars Vorschlag funktioniert auch und er war eine Minute früher. Trotzdem danke! – Phil

+0

Natürlich ist es Ihr Vorrecht, irgendeine Antwort zu markieren, aber nur für die Tatsache, war meine Antwort 5 Sekunden schneller :) – anubhava

+1

Es tut mir leid, dass ich das nicht bemerkt habe. Wie sehe ich den genauen Zeitstempel? – Phil

Verwandte Themen