我正在尝试创建一个满足以下条件的正则表达式:
这是我到目前为止得到的:
^[A-Z][a-zA-z ]{1,29}$
如果我在末尾添加 [^ ],则它允许使用特殊字符。
你可以使用
^[A-Z](?=.{1,29}$)[A-Za-z]*(?:\h+[A-Z][A-Za-z]*)*$
模式匹配:
^
字符串开头[A-Z]
匹配大写字符 A-Z(?=.{1,29}$)
向右断言 1-29 个字符,直到字符串末尾[A-Za-z]*
可选择匹配字符 A-Za-z(?:\h+[A-Z][A-Za-z]*)*
(可选)重复 1 个以上水平空白字符,后跟大写字符 A-Z 和可选字符 A-Za-z$
字符串结束在 Java 中使用双反斜杠
String regex = "^[A-Z](?=.{1,29}$)[A-Za-z]*(?:\\h+[A-Z][A-Za-z]*)*$";
var pattern = Pattern.compile("^((?=.{1,29}$)[A-Z]\\w*(\\s[A-Z]\\w*)*)$");
var matcher = pattern.matcher("Multiple Words With One Space Separator");
System.out.println(matcher.matches()); // false
matcher = pattern.matcher("Multiple Words");
System.out.println(matcher.matches()); // true
String regex = "[A-Z](?=.{1,29}$)[A-Za-z]{1,}([ ][A-Z][A-Za-z]{1,})*";
上面的答案对我来说并不完全有效(在 mendix 中)。它不满足“至少 2 个字符长”部分,所以我们想出了这个:
^([A-ZÁÉÍÚÜŰÓÖŐ][A-ZÁÉÍÚÜŰÓÖŐa-záéíúüűóöő\-]+)( [A-ZÁÉÍÚÜŰÓÖŐ][A-ZÁÉÍÚÜŰÓÖŐa-záéíúüűóöő\-]+)+$
我们添加了匈牙利字符和“-”,因为姓氏中允许使用它,但对于您的情况,您可以使用:
^([A-Z][a-z]+)( [A-Z][a-z]+)+$