用于验证全名的Java Regex仅允许空格和字母

时间:2013-04-04 07:57:57

标签: java regex validation

我希望正则表达式只验证字母和空格。基本上这是验证全名。例如:史蒂夫柯林斯先生或史蒂夫柯林斯我试过这个正则表达式。 “[1 - ZA-Z] + \。?”但没有工作。请有人帮助我 附:我用的是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();

}

15 个答案:

答案 0 :(得分:81)

怎么样:

  • PeterMüller
  • FrançoisHollande
  • Patrick O'Brian
  • Silvana Koch-Mehrin

验证名称是一个难题,因为有效名称不仅包含字母A-Z。

至少应该对字母使用Unicode属性并添加更多特殊字符。第一种方法可能是例如:

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

\\p{L}Unicode Character Property,可以匹配来自任何语言的任何类型的字母

答案 1 :(得分:11)

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

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

这也将确保DOT永远不会出现在名称的开头。

答案 2 :(得分:11)

对于那些使用java / android并且努力解决这个问题的人来说:

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

这适用于像

这样的名称
  • JoséBrasão

答案 3 :(得分:5)

您甚至可以尝试使用此表达式^[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
    }

答案 4 :(得分:4)

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

  

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

答案 5 :(得分:2)

仅接受带空格的字符: -

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

答案 6 :(得分:2)

仅匹配字母和空格的正则表达式模式:

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

答案 7 :(得分:1)

要仅验证字母和空格,请尝试此

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

答案 8 :(得分: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();

}

答案 9 :(得分: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}+$ - 或者它应该包含一个或多个字母(这样做是为了支持单个字母的名称)。

支持点(句号)被删除,例如在英国英语中,它可以放在先生或夫人身上。

答案 10 :(得分:0)

验证以下值: “”,“FIR”,“FIR”,“FIR LAST”

/^[A-z]*$|^[A-z]+\s[A-z]*$/

答案 11 :(得分:0)

检查一下。

String name validation only accept alphabets and spaces
public static boolean validateLetters(String txt) {

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

}

答案 12 :(得分:0)

支持类似印地语的语言,该语言在两个语言字符之间也可以包含/ p {Mark}。 我的解决方法是^[\p{L}\p{M}]+([\p{L}\p{Pd}\p{Zs}'.]*[\p{L}\p{M}])+$|^[\p{L}\p{M}]+$

您可以在此处找到所有测试用例 https://regex101.com/r/3XPOea/1/tests

答案 13 :(得分:0)

尝试一下:

public static boolean userNameValidation(String name){

return name.matches("(?i)(^[a-z])((?![? .,'-]$)[ .]?[a-z]){3,24}$");
}

答案 14 :(得分:-1)

通过验证bootstrap

,这对我有用
$(document).ready(function() {
$("#fname").keypress(function(e) {
var regex = new RegExp("^[a-zA-Z ]+$");
var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (regex.test(str)) {
 return true;
}