2013-08-04 14 views
5

Próba sprawdzenia, czy ciąg zawiera tylko małe litery, wielkie litery lub cyfry.Bash musi przetestować ciąg alfanumeryczny

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

Myśli?

* AKTUALIZACJA *

Zmienna TYTUŁ obecnie ma tylko dużymi literami tekst tak, to powinien przejść i nic nie powinno być wyprowadzane. Jeśli jednak dodaję znak specjalny do TITLE, instrukcja JEŻE powinna go przechwycić i wywołać NIEPRAWIDŁOWE. Obecnie to nie działa. Zawsze echa są nieważne. Myślę, że to dlatego, że moje wyrażenie regex jest błędne. Myślę, że tak napisałem, że szuka tytułu, który ma w sobie wszystkie trzy.

Bash 4.2.25

Chodzi o to, użytkownik powinien móc dodać dowolny tytuł tak długo, jak to zawiera tylko wielkie litery, małe litery lub cyfry. Wszystkie inne postacie powinny zawieść.

* AKTUALIZACJA *

Jeśli TYTUŁ = ThisIsAValidTitle to Echos nieprawidłowy.

Jeśli TITLE = ThisIs @@@@@@@ InvalidTitle echa są nieprawidłowe.

* ROZWIĄZANIE *

Weird, dobrze rozpoczął pracę kiedy uproszczone go do tego:

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

* rzeczywiste rozwiązanie *

Moja zmienna miała miejsca w nim ... DUH

Przepraszamy za problemy ...

* ROZWIĄZANIE końcowy *

Stanowi to przestrzenie w tytułach

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

Jaki był wynik? Czego się spodziewałeś? –

+0

Zmienna TITLE ma obecnie tylko duże litery, więc powinna przejść i nic nie powinno być wyprowadzane. Jeśli jednak dodaję znak specjalny do TITLE, instrukcja JEŻE powinna go przechwycić i wywołać NIEPRAWIDŁOWE. Obecnie to nie działa. Zawsze echa są nieważne. Myślę, że to dlatego, że moje wyrażenie regex jest błędne.Myślę, że tak napisałem, że szuka tytułu, który ma w sobie wszystkie trzy. – Atomiklan

+0

Wydaje się, że działa dobrze dla mnie. Z jakiej wersji bash korzystasz? –

Odpowiedz

11

bym odwrócić logikę. Test dla niepoprawnych znaków i echo ostrzeżenie, jeśli co najmniej jeden jest obecny:

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

Z powiedział, że oryginalny check pracował dla mnie, więc prawdopodobnie trzeba dostarczyć więcej kontekst (czyli większa część skryptu) .

+0

Bez zmian. Jeśli TITLE = ThisIsAValidTitle echa są nieprawidłowe. Jeśli TITLE = ThisIs @@@@@@@ InvalidTitle również echa są nieprawidłowe. – Atomiklan

+0

Którą powłokę to uruchamiasz (tj. Jaka jest linia skryptu w twoim skrypcie)? –

+0

Daję ci częściowy kredyt, ponieważ pomogłeś mi zmienić składnię. Dziękuję Ci – Atomiklan

0

nominowana odpowiedź jest błędna. Ponieważ nie sprawdza końca łańcucha. również jest odwrócony. jako warunkowe mówi: "jeśli początek ciągu znaków jest prawidłowy, to echo nieważne"

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

echo $ret 
Powiązane problemy