我想使用正则表达式来验证名称。名称必须包含名字、中间名、姓氏(不一定全部(。但我也想强加一个条件,即名称必须至少有四个字符。我在这里找到了正则表达式来验证全名 Java 正则表达式来验证全名......并找到正则表达式来检查此处字符串中至少三个字符(字母(的检查 正则表达式以检查至少 3 个字符。但我不确定如何将这两者结合起来以获得预期的结果。请帮助我实现所需的正则表达式,以便我可以完成我的项目。
^[a-zA-Z]{4,}(?: [a-zA-Z]+){0,2}$
查看正则表达式演示
这将适用于以小写和大写字母开头的名称。
-
^
- 字符串的开头 -
[a-zA-Z]{4,}
- 4 个或更多 ASCII 字母 -
(?: [a-zA-Z]+){0,2}
- 0 到 2 次出现空格,后跟一个或多个 ASCII 字母 -
$
- 字符串的结尾。
如果需要将单词限制为以大写字母开头,可以使用
^[A-Z][a-zA-Z]{3,}(?: [A-Z][a-zA-Z]*){0,2}$
这是我的解决方案:
^[a-zA-Z]{3,}( {1,2}[a-zA-Z]{3,}){0,}$
- ^ -->字符串的开头。
- [a-zA-Z]{3,} --> 3 个或更多字符。
- ( {1,2}[a-zA-Z]{3,}({0,} --> 0 个或更多字符的单词。
- $ -->字符串的结尾。
这可能有点矫枉过正,但是:
([A-Z][a-z]{3,} )([A-Z][a-z]{3,} )?([A-Z][a-z]{3,})
应该做这个伎俩。它匹配以大写字母开头的单词,后跟 3 个或更多小写字母 ->单词的长度为 4。中间名是可选的,姓氏不包含尾随空格。
编辑:
如果你想支持"花哨"字符(äöü等(,你可以阅读这个问题了解细节。使用带有 UNICODE_CHARACTER_CLASS 标志的 Java 7 模式,正则表达式应如下所示:
(\p{Upper}\p{Lower}{3,} )(\p{Upper}\p{Lower}{3,} )?(\p{Upper}\p{Lower}{3,})