Nếu bạn muốn kết hợp bất cứ điều gì nhưng chữ cái, bạn nên có một cái nhìn vào Unicode properties.
\p{L}
là bất kỳ loại lá thư từ bất kỳ ngôn ngữ
Sử dụng một "P" viết hoa thay vào đó là sự phủ định, vì vậy \P{L}
sẽ phù hợp với bất cứ điều gì đó không phải là một lá thư.
\d
hoặc \p{Nd}
là phù hợp với chữ số
Vì vậy, biểu hiện của bạn trong phong cách Unicode hiện đại sẽ trông như thế này
Hoặc sử dụng một lớp nhân vật phủ nhận
[^\p{L}\p{Nd}]
hoặc phủ nhận tính
[\P{L}\P{Nd}]
Điều tiếp theo là, matches()
khớp với biểu thức so với chuỗi hoàn chỉnh, vì vậy biểu thức của bạn chỉ đúng với một char trong chuỗi. Vì vậy, bạn sẽ cần phải thêm một định lượng:
string.matches("[^\p{L}\p{Nd}]+")
trả về true, khi chuỗi hoàn chỉnh không chỉ có chữ số và ít nhất một trong số chúng.
[^ A-Za-z0-9] .. – Pheonix