38

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

}
4

15 回答 15

100

关于什么:

  • 彼得·穆勒
  • 弗朗索瓦·奥朗德
  • 帕特里克·奥布莱恩
  • 西尔瓦娜·科赫-梅林

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

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

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

\\p{L}是一个Unicode 字符属性,可以匹配来自任何语言的任何类型的字母

于 2013-04-04T08:26:08.190 回答
16

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

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

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

于 2013-04-04T08:01:46.953 回答
13

对于那些使用 java/android 并在这件事上苦苦挣扎的人,请尝试:

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

这适用于像这样的名字

  • 何塞·布拉桑
于 2014-03-18T15:32:26.850 回答
9

您甚至可以尝试使用此表达式^[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
    }
于 2014-12-08T13:00:20.120 回答
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
}
于 2015-11-06T09:57:59.780 回答
3

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

String regexUserName = "^[A-Za-z\\s]+$";
于 2016-09-23T11:36:06.297 回答
2

只接受带空格的字符:-

 if (!(Pattern.matches("^[\\p{L} .'-]+$", name.getText()))) {
    JOptionPane.showMessageDialog(null, "Please enter a valid character", "Error", JOptionPane.ERROR_MESSAGE);
    name.setFocusable(true);
    }  
于 2013-12-12T06:03:44.963 回答
2

我个人的选择是: ^\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}+$- 或者它应该只包含 1 个或多个字母(这样做是为了支持单个字母名称)。

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

于 2018-02-12T11:48:16.587 回答
1

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

String name1_exp = "^[a-zA-Z]+[\-'\s]?[a-zA-Z ]+$";
于 2015-12-22T07:58:49.457 回答
1

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

/^[A-z]*$|^[A-z]+\s[A-z]*$/
于 2018-03-26T09:22:58.180 回答
1

看一下这个。

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

}
于 2018-09-15T12:15:18.353 回答
1

支持像印地语这样可以在语言字符之间包含 /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

于 2019-07-15T10:04:13.037 回答
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();

}
于 2018-02-09T04:34:24.433 回答
0

试试这个:

public static boolean userNameValidation(String name){

return name.matches("(?i)(^[a-z])((?![? .,'-]$)[ .]?[a-z]){3,24}$");
}
于 2020-12-15T06:05:45.320 回答
-2

这适用于我验证引导程序

$(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;
}
于 2018-05-18T06:52:28.383 回答