2013-04-04 400 views
25

我想正則表達式只驗證字母和空格。基本上這是爲了驗證全名。例如:Steve Collins先生或Steve Collins我試過這個正則表達式。 「[1 - ZA-Z] + \。?」但沒有工作。有人可以幫我請 p.s.我使用Java。Java正則表達式驗證全名只允許空格和字母

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(); 

} 

回答

67

什麼:

  • 彼得·穆勒
  • 奧朗德
  • 帕特里克·奧布萊恩
  • 錫爾弗納·庫奇·梅里

驗證名是一個棘手的問題,因爲有效的名稱不僅由字母AZ組成。

至少您應該使用Unicode屬性的字母並添加更多特殊字符。第一種方法可以例如:

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

\\p{L}Unicode Character Property,任何一種字母匹配任何語言

+0

是的,這是非常真實的。這個正則表達式完美。智能one.thnx很多 – amal 2013-04-04 08:31:46

+6

(基於STEMA的答案) 這個怎麼樣: ' 「^ \ PL + \ PL \ PZ \的pP] {0,}」' 現在所有的破折號,點和空間也在unicode – 2013-04-04 10:05:47

+0

「+」代表什麼? – Zen 2016-06-14 07:29:14

11

試試這個正則表達式(允許字母,點,空格):

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

這也將確保DOT從來不會出現在名稱的開始。

+0

我必須使用\\ s for Java嗎? – amal 2013-04-04 08:06:33

+0

「\ s」匹配單個空格字符,包括空格,製表符,換頁符,換行 – 2013-04-04 08:08:06

+0

這是我的。但即使輸入數字,它也會返回true。 – amal 2013-04-04 08:10:36

2

僅接受字符與空間: -

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

對於那些誰使用java/android並與此事糾纏請嘗試:

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

這適用於的名字,如

  • 何塞Brasão
+0

我對正則表達式不太瞭解,但是,我想知道的是這個正則表達式也停止了數字 – FaisalAhmed 2017-02-08 09:25:37

3

你甚至可以嘗試這種表達^[a-zA-Z\\s]*$檢查只用字母和空格(沒有別的)的字符串。

對我來說它工作。希望它也適合你。

或者經過這段代碼一次:

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

對我很好,謝謝,只是用正則表達式... – 2016-09-14 11:03:04

3

請嘗試此正則表達式(只允許字母和空格)

「[A-ZA-Z] [A-ZA- Z] *」

的IOS我是把它作爲跟隨

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

'[a-zA-Z] [a -zA-Z] *'和'[a-zA-Z] [a-zA-Z] +'?你知道嗎 ? – 2016-12-12 05:31:38

+1

*表示可選(零或多個),+表示多於一個。 所以假設你檢查單個字符,那麼'[a-zA-Z] [a-zA-Z] *'將返回true,但對於'[a-zA-Z] [a-zA-Z] +'返回false因爲你需要2個字符。 注意:您可以使用'[a-zA-Z] +'而不是'[a-zA-Z] [a-zA-Z] *'都是等效的。 – jay 2016-12-13 11:12:37

+0

ohh多謝@jay – 2016-12-13 12:15:43

1

,以驗證只有字母和空格,試試這個

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

如果我想驗證可能是代碼的字符數? – 2016-08-01 14:28:59

2

正則表達式匹配只有字母和空格:

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

@amal。此代碼將符合您的要求。只有字母和空格之間將被允許,沒有數字。文本以任何字母開頭,只能在兩者之間留出空間。 「^」表示行的開始,「$」表示行的結尾。

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

我個人的選擇是: ^\p{L}+[\p{L}\p{Pd}\p{Zs}']*\p{L}+$|^\p{L}+$,其中:

^\p{L}+ - 它應該有1個或多個字母開頭。

[\p{Pd}\p{Zs}'\p{L}]* - 它可以包含字母,空格字符(包括不可見),短劃線或連字符以及'以任意順序0次或更多次。

\p{L}+$ - 應該用1個或多個字母來結束。

|^\p{L}+$ - 或者它只是應該包含一個或多個字母(這是爲了支持單個字母的名稱)。

例如,在英式英語中,支持小點(站點)被丟棄,例如它可以放在Mr或Mrs中。

相關問題