【问题标题】:Regex for First name only English仅名字的正则表达式英语
【发布时间】:2018-11-07 16:08:29
【问题描述】:

我需要为名字定义一个正则表达式,要求如下。

  • 不允许使用数字或特殊字符,只允许使用字母
  • 不应以空格开头
  • 第一个字符后允许有空格
  • 最小长度为 1,最大长度为 8

以上我使用/^\S[a-zA-Z\s]{1,8}/

不知何故,它允许在第一个字符中使用特殊字符。

非常感谢任何建议。

谢谢

【问题讨论】:

  • 哪种编程语言?
  • 那么像 "x" 后跟 7 个空格的字符串也可以接受吗?那么除了空格之外的其他空格呢?

标签: regex


【解决方案1】:

您可以使用以下正则表达式:

^[a-zA-Z][a-zA-Z ]{0,7}$

DEMO

说明:

  • ^ 行首锚点
  • [a-zA-Z] 第一个字符只是一个字母
  • [a-zA-Z ]{0,7} 字符串的其余部分可以是大写或小写字母,重复 1 到 7 次以实现您的长度限制。
  • $ 用于 EOL 约束的锚

免责声明:

此正则表达式适用于英文名称,但会拒绝所有包含拉丁/日语/...字符的名称。

对于接受更多国际名称的更通用的正则表达式

^\p{L}(?:\p{L}| | ){0,7}$

你可以使用这个允许正常和日文空格。

DEMO 2

【讨论】:

    【解决方案2】:

    \S 匹配任何非空白字符(等于[^\r\n\t\f\v ])。

    我不是正则表达式忍者,但这应该可以:^[A-Za-z][A-Za-z ]{0,7}。见:https://regex101.com/r/xQe81c/4

    【讨论】:

    • \S 也不允许 Unicode 中的很多东西。我想应该相当于\P{Z}
    • 你不需要指定{1} ;-)
    • @Allan 谢谢。已更新。
    • 无论如何不错的答案 +1 ;-)
    • 为什么不以 $ 结尾?
    【解决方案3】:

    这应该可以工作:^[a-zA-z][a-zA-Z\s]{1,7}$

    【讨论】:

    • 为什么选择 A-z?那是错字吗?顺便说一句,这与最小值 1 不匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多