Java Periksa String untuk Huruf Kecil / Huruf Besar, Karakter Khas dan Digit

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan menggambarkan bagaimana kita dapat memeriksa apakah String mengandung sekurang-kurangnya salah satu dari yang berikut: huruf besar, huruf kecil, digit atau karakter khas di Jawa .

2. Menggunakan Ungkapan Biasa

Salah satu cara untuk melakukan pemeriksaan kami adalah dengan menggunakan ungkapan biasa. Untuk mengenal ungkapan biasa, sila baca artikel ini.

Pertama sekali, mari tentukan ungkapan biasa untuk setiap kumpulan watak yang diperlukan. Oleh kerana ungkapan biasa diperbaiki, tidak perlu menilainya pada setiap larian, 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 kaedah mudah yang akan kita gunakan untuk menguji apakah String kita sesuai dengan syarat:

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

2.1. Ungkapan Biasa Tunggal

Contoh sebelumnya cukup mudah dibaca dan membolehkan kita menggunakan beberapa corak dengan mudah jika perlu. Tetapi, dalam keadaan di mana kita hanya peduli untuk memenuhi semua syarat, adalah lebih efisien menggunakan satu ungkapan biasa.

Dengan cara itu kita tidak memerlukan blok statik untuk memulakan dan menyusun semua ungkapan kita yang banyak. Juga, tidak perlu melakukan iterasi pada semua itu dan mencari padanan mana dan mana yang tidak.

Yang perlu kita buat ialah menyatakan regex kita:

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

Dan kemudian menyusun dan membandingkannya:

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

Ada beberapa perkara yang harus kita perhatikan mengenai ungkapan biasa kita.

Pertama, kami telah menggunakan pandangan positif ( ? = X ) untuk setiap kumpulan watak . Itu bermaksud bahawa kita mengharapkan X akan dijumpai setelah permulaan String (ditandai dengan ^ ) agar sesuai, tetapi kita tidak mahu sampai ke akhir X , sebaliknya kita ingin tetap berada di awal baris .

Perkara lain yang perlu diperhatikan ialah kali ini kita tidak menggunakan [AZ] atau [az] untuk kumpulan huruf, tetapi \ p {Lu} dan \ p {Ll} sebagai gantinya. Ini akan sesuai dengan semua jenis huruf (dalam kes kami, huruf besar dan huruf kecil masing-masing) dari bahasa apa pun, bukan hanya bahasa Inggeris.

3. Menggunakan Java Core

Sekarang mari kita lihat bagaimana kita dapat melakukan pemeriksaan yang sama jika kita tidak mahu menggunakan ungkapan biasa. Kami akan memanfaatkan kelas Character and String dan kaedahnya untuk memeriksa sama ada semua watak 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; }

Kita harus perhatikan beberapa perkara di sini. Idea asasnya adalah bahawa kita melakukan iterasi melalui String kita dan memeriksa apakah wataknya adalah jenis yang diperlukan. Dengan menggunakan kelas Karakter , kita dapat dengan mudah memeriksa apakah watak tertentu adalah digit, huruf besar atau huruf kecil.

Malangnya, tidak ada kaedah serupa yang akan memberitahu kita jika kita berurusan dengan salah satu watak khas. Jadi, ini bermaksud bahawa kita perlu mengambil pendekatan lain.

Kami telah membuat String yang mengandungi semua watak khas yang kami perlukan dan kemudian memeriksa apakah itu mengandungi watak khusus kami.

4. Kesimpulan

Dalam artikel ringkas ini, kami telah menunjukkan cara memeriksa apakah String mengandungi watak yang diperlukan. Dalam senario pertama, kami menggunakan ungkapan biasa sementara yang kedua memanfaatkan kelas inti Java .

Seperti biasa, kod sumber lengkap boleh didapati di GitHub.