【问题标题】:Regex to match card code input正则表达式匹配卡代码输入
【发布时间】:2010-04-10 19:58:48
【问题描述】:

如何编写一个正则表达式来匹配这些规则的字符串?

  • 1 个字母后跟 4 个字母或数字,然后
  • 5 个字母或数字,然后
  • 3 个字母或数字后跟一个数字和以下符号之一:! &@?

我需要允许输入为 15 个字符的字符串或 3 组,每组 5 个字符,由一个空格分隔。

我正在用 JavaScript 实现它。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我不会为你写出整个正则表达式,因为这是家庭作业,但这里有一些提示可以帮助你:

    • 使用字符类。 [A-Z] 匹配所有大写字母。 [a-z] 匹配所有小写字母。 [0-9] 匹配数字。你可以像[A-Za-z0-9]这样组合它们。
    • 使用像 {n} 这样的量词,所以 [A-Z]{3} 给你 3 个大写字母。
    • 您可以将其他字符放入字符类中。假设您想匹配 % 或 @ 或 #,您可以使用 [%@#] 匹配任何这些字符。
    • 一些元字符(在正则表达式上下文中具有特殊含义的字符)需要像这样转义:\$(因为$ 匹配行尾)
    • ^$ 分别匹配行的开头和结尾。
    • \s 匹配空白,但如果您清理输入,则不需要使用它。
    • 正则表达式后面的标志做特殊的事情。例如在/[a-z]/i 中,i 忽略大小写。

    【讨论】:

    • 不清楚这是作业,那只是一些路过的标签破坏者。
    • @Roger:即使这不是家庭作业本身,OP也清楚地发现自己正在学习正则表达式,并且会从教学响应中获得更多而不是一个完整的答案。或者至少这是我的看法。
    • @dmckee:我并不是说不应该给出教学答案;就像非家庭作业的问题一样,解释为什么总是更有价值。但是类似“你不应该得到一个完整的答案,这里有一些提示”这样的回答有点冒犯(充其量)。
    • @Roger,我并不想冒犯。老实说,我认为这是家庭作业(我看了看标签)。它可能是通过标记驱动的。但我假设这是家庭作业。根据我的假设,我认为最好将人们引向正确的方向,而不是仅仅给他们答​​案。我并不是要暗示他们不应该得到答案。我只是想帮助他们学习,因为我(可能错误地)认为这是家庭作业;这是我在寻求家庭作业问题帮助时的亲身经历(在 SO 之外,当我在学校时)。
    • 没有否决您或其他任何事情,我认为您在概述各种功能方面做得不错——这是关键问题:总是更好地指出人们不管是不是功课,基础扎实的正确方向。我只是不明白为什么答案应该根据该因素而改变。家庭作业不应该是一个让学生猜测的谜题。
    【解决方案2】:

    应该是这样的:

    /^[a-z][a-z0-9]{4} ?[a-z0-9]{5} ?[a-z0-9]{3}[0-9][!&@?]$/i
    

    如果您认为合适,请随意将 0-9 和 [0-9] 更改为 \d
    正则表达式简单易读。 ^$ 确保这是一个完整的匹配,因此代码前后没有多余的字符,/i 标志允许大写或小写字母。

    【讨论】:

    • 规范只允许 15 或 17 个字符;您的正则表达式也将允许 16 个字符。
    • @Gumbo - 这是正确的,我很清楚这一点。这样好像更好看。 @Stephen - 我希望人们无缘无故地停止添加作业标签。让我们看看首先实现了什么。
    【解决方案3】:

    我会从tutorial开始。

    注意量词(如{N})和字符类(如[a-zA-Z]

    【讨论】:

      【解决方案4】:
      ^[a-zA-Z][a-zA-Z0-9]{4} ?[a-zA-Z0-9]{5} ?[a-zA-Z0-9]{3}[\!\&\@\?]$
      

      【讨论】:

      • 你不需要在字符类中转义这些字符; [!&@?] 就够了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2016-11-12
      • 2020-08-06
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多