Java Kontroller en streng for små / store bokstaver, spesialtegn og siffer

1. Oversikt

I denne raske opplæringen vil vi illustrere hvordan vi kan sjekk om en String inneholder minst ett av følgende: store bokstaver, små bokstaver, siffer eller spesialtegn i Java.

2. Bruke vanlige uttrykk

En av måtene å utføre kontrollen vår på er å bruke vanlige uttrykk. For å bli kjent med vanlige uttrykk, sjekk ut denne artikkelen.

La oss først definere det regulære uttrykket for hver av de nødvendige tegngruppene. Siden regulære uttrykk er løst, er det ikke nødvendig å evaluere dem ved hvert løp, så vi kompilerer dem før vi sammenligner med dem:

privat statisk sluttmønster [] inputRegexes = nytt mønster [4]; statisk {inputRegexes [0] = Pattern.compile (". * [A-Z]. *"); inputRegexes [1] = Mønsterkompilering (". * [a-z]. *"); inputRegexes [2] = Mønsterkompilering (". * \ d. *"); inputRegexes [3] = Pattern.compile (". * [` [email protected] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\ " , /?]. * ");}

Vi bør også lage en enkel metode som vi skal bruke for å teste om vår String samsvarer med vilkårene:

privat statisk boolsk isMatchingRegex (strenginngang) {boolsk inputMatches = true; for (Pattern inputRegex: inputRegexes) {if (! inputRegex.matcher (input) .matches ()) {inputMatches = false; }} returner inputMatches; }

2.1. Enkelt regulært uttrykk

Det forrige eksemplet er ganske lesbart og lar oss bare bruke noen av mønstrene om nødvendig. Men i et tilfelle hvor vi bare bryr oss om å oppfylle alle vilkårene, er det mye mer effektivt å bruke et enkelt regulært uttrykk.

På den måten trenger vi ikke en statisk blokk for å initialisere og kompilere alle våre flere uttrykk. Det ville heller ikke være behov for å gjenta dem alle og finne hvilke treff og hvilke som ikke stemmer.

Alt vi trenger å gjøre er å erklære regexen vår:

Streng regex = "^ (? =. *? \ p {Lu}) (? =. *? \ p {Ll}) (? =. *? \ d)" + "(? =. *? [`[e-postbeskyttet] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\", /?]). * $ ";

Og kompilere og sammenligne det:

@Test offentlig ugyldighet givenSingleRegex_whenMatchingCorrectString_thenMatches () {String validInput = "Ab3;"; assertTrue (Pattern.compile (regex) .matcher (validInput) .matches ()); }

Det er noen få ting vi bør påpeke angående vårt vanlige uttrykk.

Først har vi brukt positive lookahead (? = X) for hver gruppe tegn. Det betyr at vi forventer X å finne etter begynnelsen av strengen (merket med ^) for å matche, men vi vil ikke gå til slutten av X, heller vil vi være på begynnelsen av linjen.

En annen ting å merke seg er at denne gangen brukte vi ikke [A-Z] eller [a-z] for brevgrupper, men \ p {Lu} og \ p {Ll} i stedet. Disse vil matche alle slags bokstaver (i vårt tilfelle, henholdsvis store og små bokstaver) fra hvilket som helst språk, ikke bare engelsk.

3. Bruke Core Java

La oss nå se hvordan vi kan utføre den samme kontrollen hvis vi ikke vil bruke vanlige uttrykk. Vi drar nytte av det Karakter og String klasser og deres metoder for å sjekke om alle nødvendige tegn er til stede i vår String:

privat statisk boolsk sjekkString (strenginngang) {String specialChars = "~` [email protected] # $% ^ & * () -_ = + \ | [{]};: '\ ", /?"; char currentCharacter ; boolsk numberPresent = false; boolsk upperCasePresent = false; boolsk lowerCasePresent = false; boolsk specialCharacterPresent = false; for (int i = 0; i <input.length (); i ++) {currentCharacter = input.charAt (i); hvis ( Character.isDigit (currentCharacter)) {numberPresent = true;} else if (Character.isUpperCase (currentCharacter)) {upperCasePresent = true;} else if (Character.isLowerCase (currentCharacter)) {lowerCasePresent = true;} else if (specialChars. inneholder (String.valueOf (currentCharacter))) {specialCharacterPresent = true;}} return numberPresent && upperCasePresent && lowerCasePresent && specialCharacterPresent;}

Vi bør merke oss noen få ting her. Grunnideen er at vi itererer gjennom vår String og sjekk om tegnene er av nødvendige typer. Ved bruk av Karakter klasse, kan vi enkelt sjekke om et bestemt tegn er et siffer, stor eller liten bokstav.

Dessverre er det ingen lignende metode som kan fortelle oss om vi har å gjøre med en av spesialtegnene. Så det betyr at vi må ta en annen tilnærming.

Vi har opprettet en String inneholder alle spesialtegnene vi trenger og deretter sjekket om den inneholder vårt spesifikke tegn.

4. Konklusjon

I denne raske artikkelen har vi vist hvordan du sjekker om en String inneholder nødvendige tegn. I det første scenariet brukte vi vanlige uttrykk mens vi i det andre benyttet oss av Java-klasser.

Som vanlig kan du finne fullstendig kildekode på GitHub.