2011-11-09 29 views
5

tôi có phương pháp sau đây để kiểm tra ký tự cho phép:biểu hiện thường xuyên để kiểm tra ký tự cho phép không làm việc trong Java

private boolean checkIfAllCharsAreValid(String test) { 
    boolean valid = false; 
    if (test.matches("^[a-zA-Z0-9,.;:-_'\\s]+$")) { 
     valid = true; 
    } 
    return valid; 
} 

nhưng nếu kiểm tra có tính chất - trong đó trận đấu trở lại sai. Tôi có phải thoát khỏi số - không?

+1

Tại sao bạn không thử thoát? – Simon

Trả lời

9

Bên trong [ ... ] biểu tượng - được xử lý đặc biệt. (Bạn sử dụng nó mình vào mục đích đặc biệt này vào đầu biểu hiện của bạn, nơi bạn có a-z.)

Bạn cần phải thoát khỏi nhân vật -

[a-zA-Z0-9,.;:\-_'\s] 
      ^

hoặc đặt nó cuối cùng (hoặc đầu tiên) trong [...] biểu hiện như

[a-zA-Z0-9,.;:_'\s-] 
       ^

Một số lưu ý thêm:

  • Về mặt kỹ thuật, tất cả các ký tự hợp lệ trong chuỗi trống, vì vậy tôi sẽ thay đổi từ + thành * trong biểu thức của bạn.

  • String.matches kiểm tra chuỗi đầy đủ, vì vậy, ^$ là không cần thiết.

  • toàn bộ phương pháp của bạn có thể được wirtten như

    return test.matches("[a-zA-Z0-9,.;:_'\\s-]*"); 
    
+0

Cảm ơn lời giải thích :) –

+0

Không sao cả. Không có gì. – aioobe

+0

Vì chúng ta có 'a-zA-Z0-9_' như một phần của lớp nhân vật, nó sẽ không đơn giản hóa mọi thứ để sử dụng' \ w' thay thế ?, tức là '" [\\ w,.;: '\\ s -] * "' – ishnid

1

Bạn có thể đặt các - vào lúc bắt đầu của nhóm nhân vật để nó không được hiểu như là một loạt nhân vật.

2

A - trong một lớp nhân vật được bao quanh trên cả hai mặt là ký tự meta regex để biểu thị dải ô.

Để liệt kê một chữ - trong một lớp học char bạn thoát khỏi - trong lớp char:

if (test.matches("^[a-zA-Z0-9,.;:\\-_'\\s]+$")) 
           ^^^ 

hoặc đặt - vào cuối lớp char:

if (test.matches("^[a-zA-Z0-9,.;:_'\\s-]+$")) 
            ^

hoặc đặt - vào đầu lớp char:

if (test.matches("^[-a-zA-Z0-9,.;:_'\\s]+$")) 
        ^
Các vấn đề liên quan