Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Lớp ký tự POSIX \p{Alnum} trong Java Regex

Lớp ký tự POSIX \p{Alnum} khớp với các ký tự chữ và số (alphanumeric): A-Z, a-z, 0-9. Tương đương [A-Za-z0-9].

Ví dụ 1: Đếm ký tự alphanumeric

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AlphanumericExample {
    public static void main(String args[]) {
        System.out.println("Nhập một chuỗi:");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        String regex = "[\\p{Alnum}]";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("Số ký tự alphanumeric: " + count);
    }
}

Kết quả mẫu 1

Nhập một chuỗi: sample 123
Số ký tự alphanumeric: 9

"sample" (6) + "123" (3) = 9. Khoảng trắng không tính.

Kết quả mẫu 2

Nhập một chuỗi: @$#%&&#*
Số ký tự alphanumeric: 0

Ví dụ 2: Lọc chuỗi chỉ chứa alphanumeric

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
    public static void main(String args[]) {
        String regex = "^\\p{Alnum}+$";

        Scanner sc = new Scanner(System.in);
        System.out.println("Nhập 5 chuỗi:");
        String[] input = new String[5];
        for (int i = 0; i < 5; i++) {
            input[i] = sc.nextLine();
        }

        Pattern p = Pattern.compile(regex);
        System.out.println("Chuỗi chỉ chứa alphanumeric:");
        for (int i = 0; i < 5; i++) {
            Matcher m = p.matcher(input[i]);
            if (m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

Kết quả mẫu

Nhập 5 chuỗi:
hello
1234
243test
##$$@
***

Chuỗi chỉ chứa alphanumeric:
hello
1234
243test

Lưu ý

  • \p{Alnum} = \p{Alpha} + \p{Digit}.
  • Chỉ bao gồm ASCII alphanumeric. Không bao gồm chữ cái có dấu (tiếng Việt, tiếng Pháp...) hay chữ non-Latin.
  • Trong Java string: "\\p{Alnum}".

Ứng dụng thực tế

  • Validate username: ^\p{Alnum}{3,20}$ (3-20 ký tự chữ/số).
  • Validate mã sản phẩm/serial: ^\p{Alnum}{8,12}$.
  • Loại bỏ ký tự đặc biệt: input.replaceAll("[^\\p{Alnum}]", "").
  • Kiểm tra mật khẩu chứa ít nhất 1 chữ và 1 số: dùng lookahead thay vì chỉ \p{Alnum}.

So sánh nhanh

ClassKhớpVí dụ khớpVí dụ KHÔNG khớp
\p{Alnum}Chữ + Sốa, Z, 5@, space, à
\p{Alpha}Chữ cáia, Z5, @, à
\p{Digit}Số 0-95a, @
\p{XDigit}Hex (0-9, A-F, a-f)5, A, fG, z, @