Pattern p = Pattern.compile("^[A-ZÅÄÖa-zåäö0-9 ]*$");
Jag skulle dock vilja att den även tar med + - och . (punkt)
Jag är inte så insatt i det där med hur escapetecket används i ett pattern, någon som har lust att rycka in?
Pattern p = Pattern.compile("^[A-ZÅÄÖa-zåäö0-9 \\-\\+\\.]*$");
Det är lite mögigt med regexpar i Java, eftersom specialtecken som plus/minus/punkt escapeas (försök stava det bättre själv ;) ) med backslash, men för att få in en backslash i en sträng måste man i sin tur escapea det med en backslash.
Till att börja med så måste du escapea tecknen +, - och . eftersom de används som nyckelord inom regexp. Och du har antgligen prövat:
Pattern p = Pattern.compile("^[A-ZÅÄÖa-zåäö0-9 [s]\+\-\.[/s]]*$");
Javas strängar är dock också escapeade. För att strängen ska få innehållet \ så måste du skriva \\. Så du måste skriva \\+\\-\\. så kommer strängen att få innehållet \+\-\. vilket är vad du vill i detta fall. Jag tycker övrigen att det verkar fel att använda kvantifikatorn * i detta fall, då den även matchar en tom sträng. Du kan också byta ut a-zA-Z0-9 mot \w (Eller snarare \\w som sagt) för att spara lite plats. Så:
Pattern p = Pattern.compile("^[\\wÅÄÖåäö\\.\\+\\- ]+$");
x{4} betyder "x fyra gånger" x+ betyder "x en eller fler gånger" x* betyder "x noll eller fler gånger" ^ betyder "början på strängen" $ betyder "slutet på strängen" [0-9]{6}-[0-9]{4}+$ betyder alltså "en sekvens på sex siffror, sen ett streck, sen en eller flera sekvenser om fyra siffror, följt av strängens slut".
Alltså kan [0-9]{4}+ motsvara "1234" eller "12345678", men inte "123" eller "123456".