Java Periksa String untuk Huruf Kecil / Huruf Besar, Karakter Khusus dan Angka

1. Ikhtisar

Dalam tutorial singkat ini, kami akan mengilustrasikan bagaimana kami dapat memeriksa apakah sebuah String berisi setidaknya satu dari setiap hal berikut: huruf besar, huruf kecil, angka atau karakter khusus di Java .

2. Menggunakan Ekspresi Reguler

Salah satu cara untuk melakukan pemeriksaan kami adalah dengan menggunakan ekspresi reguler. Untuk membiasakan diri dengan ekspresi reguler, lihat artikel ini.

Pertama-tama, mari tentukan ekspresi reguler untuk setiap grup karakter yang diperlukan. Karena ekspresi reguler sudah diperbaiki, tidak perlu mengevaluasinya di setiap proses, jadi kami akan menyusunnya sebelum membandingkannya :

private static final Pattern[] inputRegexes = new Pattern[4]; static { inputRegexes[0] = Pattern.compile(".*[A-Z].*"); inputRegexes[1] = Pattern.compile(".*[a-z].*"); inputRegexes[2] = Pattern.compile(".*\\d.*"); inputRegexes[3] = Pattern.compile(".*[`[email protected]#$%^&*()\\-_=+\\\\|\\[{\\]};:'\",/?].*"); }

Juga, kita harus membuat metode sederhana yang akan kita gunakan untuk menguji apakah String kita cocok dengan kondisi:

private static boolean isMatchingRegex(String input) { boolean inputMatches = true; for (Pattern inputRegex : inputRegexes) { if (!inputRegex.matcher(input).matches()) { inputMatches = false; } } return inputMatches; }

2.1. Ekspresi Reguler Tunggal

Contoh sebelumnya cukup mudah dibaca dan memungkinkan kita menggunakan hanya beberapa pola dengan mudah jika perlu. Namun, dalam kasus di mana kami hanya peduli tentang memenuhi semua ketentuan, akan jauh lebih efisien menggunakan ekspresi reguler tunggal.

Dengan cara itu kita tidak memerlukan blok statis untuk menginisialisasi dan mengkompilasi semua ekspresi ganda kita. Juga, tidak perlu mengulang semuanya dan menemukan mana yang cocok dan mana yang tidak.

Yang perlu kita lakukan adalah mendeklarasikan regex kita:

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

Dan kemudian kompilasi dan bandingkan:

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

Ada beberapa hal yang harus kami tunjukkan terkait ekspresi reguler kami.

Pertama, kami telah menggunakan tampilan positif ( ? = X ) untuk setiap grup karakter . Itu berarti kita mengharapkan X ditemukan setelah awal String (ditandai dengan ^ ) agar cocok, tetapi kita tidak ingin pergi ke akhir X , sebaliknya kita ingin tetap di awal baris .

Hal lain yang perlu diperhatikan adalah kali ini kami tidak menggunakan [AZ] atau [az] untuk kelompok huruf, tetapi \ p {Lu} dan \ p {Ll} sebagai gantinya. Ini akan cocok dengan semua jenis huruf (masing-masing dalam kasus kami, huruf besar dan kecil) dari bahasa apa pun, tidak hanya bahasa Inggris.

3. Menggunakan Core Java

Sekarang mari kita lihat bagaimana kita dapat melakukan pemeriksaan yang sama jika kita tidak ingin menggunakan ekspresi reguler. Kami akan memanfaatkan kelas Karakter dan String dan metodenya untuk memeriksa apakah semua karakter yang diperlukan ada di String kami :

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

Kami harus mencatat beberapa hal di sini. Ide dasarnya adalah kita melakukan iterasi melalui String kita dan memeriksa apakah karakternya termasuk tipe yang diperlukan. Dengan menggunakan kelas Karakter , kita dapat dengan mudah memeriksa apakah karakter tertentu berupa digit, huruf besar atau huruf kecil.

Sayangnya, tidak ada metode serupa yang akan memberi tahu kita jika kita berurusan dengan salah satu karakter khusus. Jadi, itu berarti kita perlu mengambil pendekatan lain.

Kami telah membuat String yang berisi semua karakter khusus yang kami butuhkan dan kemudian memeriksa apakah itu berisi karakter khusus kami.

4. Kesimpulan

Dalam artikel singkat ini, kami telah menunjukkan cara memeriksa apakah String berisi karakter yang diperlukan. Dalam skenario pertama, kami menggunakan ekspresi reguler sedangkan di skenario kedua kami memanfaatkan kelas inti Java .

Seperti biasa, kode sumber lengkap dapat ditemukan di GitHub.