2013-08-04 15 views
5

Provare a verificare che una stringa abbia solo lettere minuscole, maiuscole o numeri.Bash è necessario testare la stringa alfanumerica

if ! [[ "$TITLE" =~ ^[a-zA-Z0-9]+$ ]]; then echo "INVALID"; fi 

Pensieri?

* AGGIORNAMENTO *

La variabile TITOLO attualmente ha solo testo in maiuscolo quindi dovrebbe passare e nulla deve essere emessa. Se tuttavia aggiungo un carattere speciale a TITLE, l'istruzione IF dovrebbe prenderlo ed echo INVALID. Attualmente non funziona. Fa sempre eco non valido. Penso che questo sia dovuto al fatto che la mia affermazione di regex è sbagliata. Penso al modo in cui l'ho scritto, alla ricerca di un titolo che contenga tutti e tre.

Bash 4.2.25

L'idea è, l'utente dovrebbe essere in grado di aggiungere qualsiasi titolo, purché contenga solo lettere maiuscole, minuscole o numeri. Tutti gli altri personaggi dovrebbero fallire.

* UPDATE *

Se TITLE = ThisIsAValidTitle che echos valido.

Se TITOLO = Questo è @@@@@@ InvalidTitle anche echo non valido.

* SOLUZIONE *

Strano, bene si inizia a lavorare quando ho semplificato si riduce a questo:

TEST="Valid0" 
if ! [[ "$TEST" =~ [^a-zA-Z0-9] ]]; then 
    echo "VALID" 
else 
    echo "INVALID" 
fi 

* vera soluzione *

mio variabile aveva spazi in esso ... DUH

Scusate per il disturbo ragazzi ...

* * soluzione finale

Questo spiega spazi nei titoli

if ! [[ "$TITLE" =~ [^a-zA-Z0-9\ ] ]]; then 
    echo "VALID" 
else 
    echo "INVALID" 
fi 
+1

Qual è stato il risultato? Cosa ti aspettavi? –

+0

Attualmente la variabile TITLE ha solo il testo in maiuscolo, quindi dovrebbe passare e nulla dovrebbe essere emesso. Se tuttavia aggiungo un carattere speciale a TITLE, l'istruzione IF dovrebbe prenderlo ed echo INVALID. Attualmente non funziona. Fa sempre eco non valido. Penso che questo sia dovuto al fatto che la mia affermazione di regex è sbagliata.Penso al modo in cui l'ho scritto, alla ricerca di un titolo che contenga tutti e tre. – Atomiklan

+0

Sembra funzionare bene per me. Che versione di bash stai usando? –

risposta

11

mi piacerebbe invertire la logica. Test per caratteri non validi e l'eco un avviso se almeno uno è presente:

if [[ "$TITLE" =~ [^a-zA-Z0-9] ]]; then 
    echo "INVALID" 
fi 

Detto questo, il vostro assegno originale ha funzionato per me, quindi probabilmente è necessario fornire più contesto (vale a dire una porzione più ampia dello script) .

+0

Nessun cambiamento. Se TITLE = ThisIsAValidTitle, echos non è valido. Se TITLE = ThisIs @@@@@@@ InvalidTitle, anche echos non è valido. – Atomiklan

+0

In quale shell stai eseguendo questo (ad esempio, qual è la linea shebang del tuo script)? –

+0

Ti concedo un credito parziale perché mi hai aiutato a cambiare la sintassi. Grazie – Atomiklan

0

la risposta nominata è errata. Perché non controlla fino alla fine della stringa. inoltre è invertito. come dice il condizionale: "se l'inizio della stringa è caratteri validi allora echo non valido"

[[ $TITLE =~ ^[a-zA-Z0-9_-]{3,20}$ ]] && ret="VALID" || ret="INVALID" 

echo $ret 
Problemi correlati