验证名称的正则表达式

问题描述 投票:0回答:4

我正在尝试创建一个满足以下条件的正则表达式:

  • 名称长度应在2至30个字符之间(含)
  • 名称只能包含字母和空格
  • 名称每个单词的第一个字符必须是大写字母
  • 每个单词应该用空格分隔
  • 名称不应以空格开头或结尾
  • 不允许使用特殊字符

这是我到目前为止得到的:

^[A-Z][a-zA-z ]{1,29}$

如果我在末尾添加 [^ ],则它允许使用特殊字符。

java regex
4个回答
3
投票

你可以使用

^[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]*)*$";

0
投票
    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

0
投票
String regex = "[A-Z](?=.{1,29}$)[A-Za-z]{1,}([ ][A-Z][A-Za-z]{1,})*";

0
投票

上面的答案对我来说并不完全有效(在 mendix 中)。它不满足“至少 2 个字符长”部分,所以我们想出了这个:

^([A-ZÁÉÍÚÜŰÓÖŐ][A-ZÁÉÍÚÜŰÓÖŐa-záéíúüűóöő\-]+)( [A-ZÁÉÍÚÜŰÓÖŐ][A-ZÁÉÍÚÜŰÓÖŐa-záéíúüűóöő\-]+)+$

我们添加了匈牙利字符和“-”,因为姓氏中允许使用它,但对于您的情况,您可以使用:

^([A-Z][a-z]+)( [A-Z][a-z]+)+$
© www.soinside.com 2019 - 2024. All rights reserved.