Java正则表达式验证全名只允许空格和字母

问题描述:

我想正则表达式只验证字母和空格。基本上这是为了验证全名。例如: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(); 

} 

什么:

  • 彼得·穆勒
  • 奥朗德
  • 帕特里克·奥布莱恩
  • 锡尔弗纳·库奇·梅里

验证名是一个棘手的问题,因为有效的名称不仅由字母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

试试这个正则表达式(允许字母,点,空格):

"^[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

仅接受字符与空间: -

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

对于那些谁使用java/android并与此事纠缠请尝试:

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

这适用于的名字,如

  • 何塞Brasão
+0

我对正则表达式不太了解,但是,我想知道的是这个正则表达式也停止了数字 – FaisalAhmed 2017-02-08 09:25:37

你甚至可以尝试这种表达^[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

请尝试此正则表达式(只允许字母和空格)

“[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

,以验证只有字母和空格,试试这个

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

如果我想验证可能是代码的字符数? – 2016-08-01 14:28:59

正则表达式匹配只有字母和空格:

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

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

} 

我个人的选择是: ^\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中。