/**
* Determines if the string is valid and returns result code
*
* @param fio string to validate
* @return 1 - valid second name, name, patronymic; 2 - valid second name, name; 0 - invalid string
*/
public static int Validate(String fio) {
Pattern pattern;
Matcher matcher;
try {
pattern = Pattern.compile("([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+"); //second name; name; patronymic
matcher = pattern.matcher(fio);
if (matcher.matches()) return 1;
pattern = Pattern.compile("([A-Z])[a-z]+ ([A-Z])[a-z]+"); //second name; name
matcher = pattern.matcher(fio);
if (matcher.matches()) return 2;
} catch (PatternSyntaxException ex1) {
System.out.println("String is incorrect!");
}
return 0;
}
你能告诉我如何改变我的regex字符串模式来验证带有连字符的第二个名称吗?
您可以使用
public static int Validate(String fio) {
//second name; name; patronymic
if (fio.matches("\\p{Lu}\\p{Ll}+(?:-\\p{Lu}\\p{Ll}+)* \\p{Lu}\\p{Ll}+ \\p{Lu}\\p{Ll}+")) {
return 1;
}
//second name; name
if (fio.matches("\\p{Lu}\\p{Ll}+(?:-\\p{Lu}\\p{Ll}+)* \\p{Lu}\\p{Ll}+")) {
return 2;
}
return 0;
}
\p{Lu}\p{Ll}+(?:-\p{Lu}\p{Ll}+)*
regex匹配
\p{Lu}
-大写Unicode字母\p{Ll}+
-1+小写Unicode字母(?:-\p{Lu}\p{Ll}+)*
-零次或多次重复
-
-连字符\p{Lu}
-大写Unicode字母\p{Ll}+
-1+小写Unicode字母System.out.println(Validate("Стриженов Анатолий Иванович"));
// => 1
System.out.println(Validate("Стриженов Анатолий"));
// => 2
System.out.println(Validate("Стриженов-Бродский Анатолий Иванович"));
// => 1
System.out.println(Validate("Стриженов-Бродский Анатолий"));
// => 2
System.out.println(Validate("Стриженов"));
// => 0
我想使用正则表达式来验证名称。名称必须包含名、中间名、姓氏(不一定全部)。但我还想设置一个条件,即名称必须至少包含四个字符。我在这里找到了用于验证全名的正则表达式Java regex to validate full name…,并在这里找到用于检查字符串中是否至少有三个字符(字母)的正则表达式regex,以检查是否至少有3个字符。但我不确定如何将这两者结合起来以获得期望的结果。请帮助我实现所需的
我将正则表达式模式的列表传递给以对照syslog文件进行检查。它们通常匹配IP地址和日志条目; 它只是一个模式列表,例如我正在循环中传递的部分,因此我不能传递“-v”。 更新:这发生在像这样的脚本中;
问题内容: 我有以下代码。 如您在上面看到的,如果字符串不包含顶点,名称或透明度,我希望将其打印出来。但是我得到一个编译错误,说|| 参数类型未定义operator。我是编程的新手,所以我不确定这意味着什么,请问有人可以指出正确的方向来修复我的代码吗? 问题答案: || 运算符使用单个布尔项,而不是提供许多不同的参数。
题目描述 给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里? 为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B) 比如,如果是下面两个字符串: String 1:ABCD String 2:BAD 答案是true,即Stri
问题内容: 我正在尝试验证我的字符串是否与模式匹配。也就是说,完整的字符串可以写为该模式。但是,如果有任何子字符串匹配该模式,则返回。(如回报,这是我不想在这个例子中,我宁愿验证,整个字符串只含有少量拉丁字母)。 问题答案: 您可以使用 开始 和 结束 标记,并分别指示开始,在您的正则表达式模式的字符串的结尾。这样,您可以使表达式仅匹配整个字符串,而不匹配任何子字符串。在您的情况下,它将如下所示:
问题内容: 我有以下Angular代码: 如何使用ng-if条件查找特定字符: 只在字符在这里时显示代码?我的值是88?77,数字是动态的,但问号始终存在,我似乎无法基于此进行过滤? 问题答案: ES2015更新 ES2015具有检查字符串是否包含另一个字符串的方法。如果目标环境支持,则可以使用它。如果在 干草堆中 找到了 针, 则该方法返回,否则返回。 __ 在这里是要搜索的字符串。 请参阅MD