【问题标题】:Can't finish regexp无法完成正则表达式
【发布时间】:2014-07-04 14:02:06
【问题描述】:

我正在尝试构建正则表达式以在 mmorpg 游戏中查找有效名称。规则如下:

  1. 必须至少有 4 个字符。
  2. 不能超过 24 个字符。
  3. 可能包含字符 A-Z、a-z、0-9 和单引号。 (公司名称也可能包含减号和点字符。)
  4. 不允许将空格或单引号字符作为名称中的第一个或最后一个字符。

这是我到目前为止所得到的。

/([A-z0-9]{1}[A-z0-9]{3,23}[A-z0-9]{1})$/

问题是我不能在 {3,23} 部分内插入零个或一个引号和零个或多个空格。有什么建议吗?

【问题讨论】:

  • 你现在可以用条件语句完成了哈哈哈!希望我能提供帮助,虽然我发现 RegEx 是一种非常有用的语言,但我对 RegEx 的了解非常有限!""""""
  • 如果您希望您的程序运行得更快并且更易于维护 - 将每个规则作为单独的验证方法实现,并尽量避免使用正则表达式!
  • 使用单独规则的额外好处是您可以准确地告诉用户他们选择的名称有什么问题。
  • @alfasin 我强烈反对,这正是正则表达式应该解决的问题。
  • 空格呢?他们能达到字数限制吗?

标签: regex


【解决方案1】:

你可以使用这个正则表达式:

/^[A-Za-z0-9](?!([^']*'){2})[ A-Za-z0-9'.-]{2,22}[A-Za-z0-9]$/

顺便说一句,[A-z][A-Za-z] 不同,因为从 Az 的范围将允许更多字符。

Online regex Demo

【讨论】:

  • @anubhava 抱歉回答迟了。实际上,您的正则表达式不会捕获“零个或多个空格”。尝试添加多个,您会看到。附:订购的要求很模糊,是的。但我清楚地说,零个或一个引号和零个或多个空格。
  • 你在我的演示中看到第三个输入了吗,Name Surname,只允许 1 个空格。
  • 在同一个演示中,您将看到输入 Name Surname Name 有 2 个空格并且它不匹配。
  • @anubhava 抱歉,我似乎没有关注你。我需要 0-N 个空格和 0-1 个单引号。您的正则表达式在阻止多个引号时不允许多个空格。设置名称“Jesus Mary Joseph”应该是合法的。
  • 好吧,虽然你只想允许 1 个空格。我刚刚编辑它现在允许 N 个空格。
【解决方案2】:

我建议这个正则表达式

^(?=.{4,24}$)(?=[^']*'?[^']*$)(?![ ']|.*[ ']$)[A-Za-z0-9'. -]+$

(?=.{4,24}$)是字符限制

(?=[^']*'?[^']*$) 用于可选的一个撇号字符(注意"' 更称为引号字符)。

(?![ ']|.*[ ']$) 防止开头和结尾出现空格和撇号。

[A-Za-z0-9'. -]+$ 允许使用字母数字、撇号(之前的前瞻已将其限制为 1)、破折号、点和空格(任何数字)。'

【讨论】:

  • 效果很好!谢谢,并额外感谢您对此的解释。 :)
  • @roflomglol 另一个答案在开头或结尾不接受点,而我的则按要求接受
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
相关资源
最近更新 更多