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

Posted

技术标签:

【中文标题】验证全名的 Java 正则表达式只允许空格和字母【英文标题】:Java Regex to Validate Full Name allow only Spaces and Letters 【发布时间】:2013-03-26 04:38:58 【问题描述】:

我希望正则表达式仅验证字母和空格。基本上这是为了验证全名。例如:Steve Collins 先生或 Steve Collins 我试过这个正则表达式。 “[a-zA-Z]+\.?”但是没有用。有人可以帮助我吗 p.s.我使用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();


【问题讨论】:

【参考方案1】:

怎么样:

彼得·穆勒 弗朗索瓦·奥朗德 帕特里克·奥布莱恩 Silvana Koch-Mehrin

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

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

String regx = "^[\\pL .'-]+$";

\\pL 是一个Unicode Character Property,可以匹配来自任何语言的任何类型的字母

【讨论】:

是的,这非常正确。这个正则表达式完美地工作。智能 one.thnx 很多 (基于stema的回答)这个怎么样:"^\pL+[\pL\pZ\pP]0," 现在所有的破折号、点和空格也都是unicode “+”代表什么? @summers 加号表示一个或多个重复 ^[\\pL]+$ 似乎也适用于所有类型的空格。空格是否也属于 Unicode 字符类别?【参考方案2】:

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

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

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

【讨论】:

Java 必须使用 \\s 吗? "\s" 匹配单个空白字符,包括空格、制表符、换页符、换行符 我试过这个。但即使我输入数字,它也会返回 true。 试试这个:"^[A-Za-z\s]1,[\.]0,1[A-Za-z\s]0,$" 除了这些情况外它工作正常。 3史蒂夫柯林斯先生,史蒂夫柯林斯先生 44柯林斯先生,史蒂夫柯林斯先生44【参考方案3】:

对于那些使用 java/android 并为这件事而苦恼的人,请尝试:

"^\\pL+[\\pL\\pZ\\pP]0,"

这适用于像

这样的名称 何塞·布拉桑

【讨论】:

我对正则表达式不太了解,但我想知道这个正则表达式是否也停止数字【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

[a-zA-Z][a-zA-Z ]*[a-zA-Z][a-zA-Z ]+ 有什么区别?你知道吗? * 表示可选(零个或多个),+ 表示多于一个。因此,假设您使用单个字符进行检查,那么 [a-zA-Z][a-zA-Z ]* 将返回 true 但对于 [a-zA-Z][a-zA-Z ]+ 返回 false 因为您需要 2 个字符。注意:您可以使用[a-zA-Z]+ 代替[a-zA-Z][a-zA-Z ]* 两者是等价的。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

只接受带空格的字符:-

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

【讨论】:

【参考方案8】:

我个人的选择是: ^\pL+[\pL\pPd\pZs']*\pL+$|^\pL+$,地址:

^\pL+ - 它应该以 1 个或多个字母开头。

[\pPd\pZs'\pL]* - 它可以包含字母、空格字符(包括不可见字符)、破折号或连字符以及 ' 任意顺序 0 次或多次。

\pL+$ - 它应该以 1 个或多个字母结尾。

|^\pL+$ - 或者它应该只包含 1 个或多个字母(这样做是为了支持单个字母名称)。

已删除对点(句号)的支持,例如在英式英语中,它可以在 Mr 或 Mrs 中删除。

【讨论】:

不应该也支持印地语名字吗?比如रोहितशर्मा。应该接受任何语言字符吗?但它无法将印地语类型脚本梵文识别为语言字符。 不幸的是,它工作正常。梵文包含零宽度连接符,因为它是复杂的脚本。 en.wikipedia.org/wiki/Zero-width_joiner【参考方案9】:

要仅验证字母和空格,试试这个

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

【讨论】:

如果我想验证字符数可能是什么代码?【参考方案10】:

验证以下值: ""、"FIR"、"FIR"、"FIR LAST"

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

【讨论】:

【参考方案11】:

看看这个。

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


【讨论】:

这比公认的答案更好吗?这与 Peter MüllerFrançois Hollande 不匹配【参考方案12】:

支持像印地语这样可以在语言字符之间包含 /pMark 的语言。 我的解决方案是^[\pL\pM]+([\pL\pPd\pZs'.]*[\pL\pM])+$|^[\pL\pM]+$

你可以在这里找到所有的测试用例 https://regex101.com/r/3XPOea/1/tests

【讨论】:

【参考方案13】:

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


【讨论】:

【参考方案14】:

试试这个:

public static boolean userNameValidation(String name)

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

【讨论】:

【参考方案15】:

这适用于我验证引导程序

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

【讨论】:

我认为你混淆了 Java 和 javascript

以上是关于验证全名的 Java 正则表达式只允许空格和字母的主要内容,如果未能解决你的问题,请参考以下文章

用于文本框验证的 HTML5 正则表达式模式:仅允许字母、空格和某些字符

Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式

允许字母、数字、小数、空格和下划线的正则表达式模式

用于验证大写字母全名的正则表达式(包括 unicode 字符)?

java正则表达式 过滤特殊字符 只允许中文、字母和数字, 该怎么写?急。。。

js 正则验证输入框只允许输入正整数或者负整数?