2011-01-13 3 views
1

Ich versuche den Tag des Monats vom Benutzer zu erfassen und möchte prüfen, ob der Tag gültig ist - zwischen 1 und 31. Ich möchte nicht Benutzer muss eine führende 0 zu einstelligen Tagen hinzufügen. Wie führe ich diese Überprüfung in einer bash if-Anweisung durch?Wie überprüfe ich, ob eine eingegebene Nummer zwischen 1 und 31 ist?

Danke.

+0

Hier ist die regex: '/^(? [012] \ d | 3 [01]) $ /'; Ich überlasse den Bash Teil jemand anderem. Beachten Sie auch, dass dies ein wenig albern ist, da '31 'für einige Monate nicht gültig ist, noch für eine Untergruppe von Jahren' 30 'oder sogar' 29 '. – Phrogz

+1

@Phrogs: Ihre Regex erlaubt '0' oder' 00'. Um auf 1-31 zu beschränken, brauchen Sie stattdessen etwas wie '^ (0? [1-9] | [12] \ d | 3 [01]) $'. – LukeH

Antwort

5

Dies ist kein Job für einen regulären Ausdruck!

Dies ist ein Job für eine conditional expression.

Hier ist ein Code, um loszulegen.

if [[ $number -lt 31 ]]; then 
    echo $number is less than 31 
else 
    echo $number is greater than 31 
fi 

Natürlich ist die Datumsvalidierung weitaus komplexer als diese. Wie viele Tage gibt es im Februar?

2

Verwenden Sie das richtige Werkzeug für den Job. Regex ist nicht das richtige Werkzeug für diesen Job.

+4

Und was ist das richtige Werkzeug? –

+0

Turing Vollständige Programmiersprache :) Mit anderen Worten, jede Sprache mit bedingten Anweisungen. Mit anderen Worten, jede Programmiersprache: P –

2

tun Sie einfach einen numerischen Vergleich:

if ((var >= 1 && var <= 31)) 
then 
    echo "Valid" 
fi 
Verwandte Themen