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,任何一种字母匹配任何语言
仅接受字符与空间: -
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
我对正则表达式不太了解,但是,我想知道的是这个正则表达式也停止了数字 – 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
}
对我很好,谢谢,只是用正则表达式... – 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
}
'[a-zA-Z] [a -zA-Z] *'和'[a-zA-Z] [a-zA-Z] +'?你知道吗 ? – 2016-12-12 05:31:38
*表示可选(零或多个),+表示多于一个。 所以假设你检查单个字符,那么'[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
ohh多谢@jay – 2016-12-13 12:15:43
,以验证只有字母和空格,试试这个
String name1_exp = "^[a-zA-Z]+[\-'\s]?[a-zA-Z ]+$";
如果我想验证可能是代码的字符数? – 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中。
是的,这是非常真实的。这个正则表达式完美。智能one.thnx很多 – amal 2013-04-04 08:31:46
(基于STEMA的答案) 这个怎么样: ' “^ \ PL + \ PL \ PZ \的pP] {0,}”' 现在所有的破折号,点和空间也在unicode – 2013-04-04 10:05:47
“+”代表什么? – Zen 2016-06-14 07:29:14