2012-07-24 37 views
5

Tôi là người mới sử dụng biểu thức chính quy java. Tôi đã viết mã sau để xác thực số không phải chữ số. Nếu chúng ta nhập bất kỳ số không chữ số nào thì nó sẽ trả về false. đối với tôi, mã dưới đây luôn trả về false. cái gì sai ở đây?Biểu thức chính quy java trả về false

gói regularexpression;

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

public class NumberValidator { 

    private static final String NUMBER_PATTERN = "\\d"; 
    Pattern pattern; 

    public NumberValidator() { 
     pattern = Pattern.compile(NUMBER_PATTERN); 
    } 

    public boolean validate(String line){ 
     Matcher matcher = pattern.matcher(line); 
     return matcher.matches(); 
    } 

    public static void main(String[] args) { 

     NumberValidator validator = new NumberValidator(); 

     boolean validate = validator.validate("123"); 

     System.out.println("validate:: "+validate); 
    } 

} 
+0

Bạn thực sự cần một Lớp học cho điều đó ??? '" 123 ".matches (" \\ d + ")' sẽ không đủ? – elias

+0

Yaa .. Đó là sự thật..với dòng đó nó hoạt động. Cảm ơn bạn đã đơn giản hóa mã .. – user414967

Trả lời

10

Từ tài liệu Java:

Phương pháp trận đấu cố gắng để phù hợp với toàn bộ chuỗi đầu vào dựa trên mô hình.

Cụm từ thông dụng của bạn khớp với một chữ số, không phải là số. Thêm + sau \\d để matchone hoặc nhiều chữ số:

private static final String NUMBER_PATTERN = "\\d+"; 

Là một mặt lưu ý, bạn có thể kết hợp khởi tạo và khai báo của mô hình, làm cho các nhà xây dựng không cần thiết:

Pattern pattern = Pattern.compile(NUMBER_PATTERN); 
+0

Điều đó không giải thích tại sao kết quả là 'sai'. '" \\ d "' cũng khớp với '" 123 "'. (Ngoài ra, nếu mẫu nên * chỉ * khớp các chữ số, nó phải là '"^\\ d + $ "'.) – Tomalak

+1

@Tomalak Cảm ơn ghi chú - Tôi đã thêm giải thích. – dasblinkenlight

+0

Ah, tôi thấy tại sao '^' và '$' là không cần thiết ở đây. Cảm ơn. – Tomalak

2

matches "trả về true nếu, và chỉ khi, toàn bộ chuỗi vùng khớp với mẫu của đối sánh này. "

Chuỗi là 3 chữ số, không khớp với mẫu \d, có nghĩa là 'chữ số'.

Thay vào đó bạn muốn mẫu \d+, có nghĩa là 'một hoặc nhiều chữ số'. Điều này được thể hiện bằng một chuỗi là "\\d+"

Các vấn đề liên quan