验证全名的 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üller
或 Franç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 字符)?