2013-04-04 40 views
25

Tôi muốn regex xác thực chỉ cho chữ cái và dấu cách. Về cơ bản đây là để xác nhận tên đầy đủ. Ví dụ: Ông Steve Collins hoặc Steve Collins Tôi đã thử regex này. "[a-zA-Z] + \.?" Nhưng không làm việc. Ai đó có thể giúp tôi xin vui lòng p.s. Tôi sử dụng Java.Java Regex để xác thực tên đầy đủ chỉ cho phép Spaces và Letters

public static boolean validateLetters(String txt) { 

    String regx = "[a-zA-Z]+\\.?"; 
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(txt); 
    return matcher.find(); 

} 

Trả lời

67

gì về:

  • Peter Müller
  • François Hollande
  • Patrick O'Brian
  • Silvana Koch-Mehrin

Members tên là một vấn đề khó khăn, bởi vì tên hợp lệ không chỉ bao gồm các chữ cái AZ.

Ít nhất bạn nên sử dụng thuộc tính Unicode cho chữ cái và thêm các ký tự đặc biệt khác. Một cách tiếp cận đầu tiên có thể được ví dụ:

String regx = "^[\\p{L} .'-]+$"; 

\\p{L} là một Unicode Character Property phù hợp với bất kỳ loại lá thư từ bất kỳ ngôn ngữ

+0

có điều đó rất đúng. Regex này hoạt động hoàn hảo. Smart one.thnx lot – amal

+6

(dựa trên câu trả lời của stema) như thế nào về cái này: '"^\ pL + [\ pL \ pZ \ pP] {0,} "' bây giờ tất cả dấu gạch ngang, dấu chấm và dấu cách trong unicode –

+0

Giá trị "+" là gì? – Zen

11

thử regex này (cho phép bảng chữ cái, Dots, Spaces):

"^[A-Za-z\s]{1,}[\.]{0,1}[A-Za-z\s]{0,}$" //regular 
"^\pL+[\pL\pZ\pP]{0,}$" //unicode 

này cũng sẽ đảm bảo DOT không bao giờ xuất hiện ở đầu của tên.

+0

Tôi có phải sử dụng \\ s cho Java không? – amal

+0

"\ s" Khớp một ký tự trắng duy nhất, bao gồm dấu cách, tab, nguồn cấp dữ liệu biểu mẫu, nguồn cấp dữ liệu dòng –

+0

Tôi đã thực hiện việc này. Nhưng nó trả về đúng ngay cả khi tôi nhập số. – amal

2

Chỉ chấp nhận nhân vật với không gian: -

if (!(Pattern.matches("^[\\p{L} .'-]+$", name.getText()))) { 
    JOptionPane.showMessageDialog(null, "Please enter a valid character", "Error", JOptionPane.ERROR_MESSAGE); 
    name.setFocusable(true); 
    } 
7

Đối với những người sử dụng java/android và đấu tranh với vấn đề này thử:

"^\\p{L}+[\\p{L}\\p{Z}\\p{P}]{0,}" 

này làm việc với những cái tên như

  • José Brasão
+0

Tôi không biết nhiều về regex nhưng, tôi muốn biết là số regex dừng này quá – FaisalAhmed

3

Bạn thậm chí có thể thử biểu này ^[a-zA-Z\\s]*$ để kiểm tra một chuỗi với chỉ chữ và không gian (không có gì khác).

Đối với tôi, nó hoạt động. Hy vọng nó cũng phù hợp với bạn.

Hoặc đi qua đoạn mã này một lần:

CharSequence inputStr = expression; 
    Pattern pattern = Pattern.compile(new String ("^[a-zA-Z\\s]*$")); 
    Matcher matcher = pattern.matcher(inputStr); 
    if(matcher.matches()) 
    { 
     //if pattern matches 
    } 
    else 
    { 
     //if pattern does not matches 
    } 
+0

Làm việc tuyệt vời cho tôi, cảm ơn, chỉ sử dụng cụm từ thông dụng ... –

3

hãy thử regex này (chỉ cho phép bảng chữ cái và không gian)

"[a-zA-Z] [a-zA- Z] *"

cho IOS tôi sử dụng nó như sau

NSString *yourstring = @"hello"; 

NSString *Regex = @"[a-zA-Z][a-zA-Z ]*"; 
NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",Regex]; 

if ([TestResult evaluateWithObject:yourstring] == true) 
{ 

    // validation passed 
} 
else 
{ 
// invalid name 
} 
+0

sự khác biệt giữa '[a-zA-Z] [a -zA-Z] * 'và' [a-zA-Z] [a-zA-Z] + '? bạn có biết không ? –

+1

* có nghĩa là tùy chọn (không hoặc nhiều hơn) và + nghĩa là nhiều hơn một. vì vậy giả sử bạn kiểm tra bằng ký tự đơn thì '[a-zA-Z] [a-zA-Z] *' sẽ trả về true nhưng đối với '[a-zA-Z] [a-zA-Z] +' trả về false cho rằng bạn cần 2 ký tự. lưu ý: bạn có thể sử dụng '[a-zA-Z] +' thay vì '[a-zA-Z] [a-zA-Z] *' cả hai đều tương đương nhau. – jay

+0

ohh cảm ơn rất nhiều @jay –

1

Để xác nhận chỉ chữ và không gian, hãy thử

String name1_exp = "^[a-zA-Z]+[\-'\s]?[a-zA-Z ]+$"; 
+0

Nếu tôi muốn xác thực số ký tự có thể là mã gì? –

2

Regex mô hình này cho phù hợp với chỉ bảng chữ cái và không gian trắng:

String regexUserName = "^[A-Za-z\\s]+$"; 
0

@amal. Mã này sẽ khớp với yêu cầu của bạn. Chỉ có chữ cái và không gian ở giữa sẽ được cho phép, không có số. Văn bản bắt đầu bằng bất kỳ chữ cái nào và chỉ có thể có khoảng trống ở giữa. "^" biểu thị sự bắt đầu của dòng và "$" biểu thị kết thúc của dòng.

public static boolean validateLetters(String txt) { 

    String regx = "^[a-zA-Z ]+$"; 
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(txt); 
    return matcher.find(); 

} 
0

sự lựa chọn cá nhân của tôi là: ^\p{L}+[\p{L}\p{Pd}\p{Zs}']*\p{L}+$|^\p{L}+$, Trong đó:

^\p{L}+ - Nó nên bắt đầu với 1 hoặc nhiều chữ cái.

[\p{Pd}\p{Zs}'\p{L}]* - Nó có thể có chữ cái, ký tự khoảng trắng (bao gồm cả ẩn), dấu gạch nối hoặc dấu gạch ngang và 'theo thứ tự bất kỳ 0 hoặc nhiều lần.

\p{L}+$ - Nó sẽ kết thúc bằng 1 hoặc nhiều chữ cái.

|^\p{L}+$ - Hoặc chỉ cần chứa 1 hoặc nhiều chữ cái (Nó được thực hiện để hỗ trợ tên chữ cái duy nhất).

Hỗ trợ cho các dấu chấm (dừng đầy) đã bị loại bỏ, như trong tiếng Anh của Anh, nó có thể bị loại bỏ trong ví dụ.

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