【问题标题】:How to set input pattern?如何设置输入模式?
【发布时间】:2022-01-10 12:38:20
【问题描述】:

谁能帮我设置正确的输入模式:当输入起始数字为 2 时,长度为 17 位,如果以 3 开头,则长度为 16 位。

例如:

当输入以数字 2 开头时,它必须是:pattern="\d{4} \d{4} \d{4} \d{4} \d{1}"

但是当输入以数字 3 开头时,它必须是:pattern="\d{4} \d{4} \d{4} \d{4}"

如何设置图案??

【问题讨论】:

  • @wiktorstribizew 所以就我而言,我猜它一定是这样的?模式="^(?:2\d{4} \d{4} \d{4} \d{4}|3 \d{4} \d{4} \d{4} \d{4} \d{1})$" 因为它必须类似于以 3 开头然后 9999 9999 9999 9999 9 或以 2 开头然后 9999 9999 9999 9999
  • 您的意思是您在描述中交换了23?那么是的,只要确保使用正确的数字即可。请参阅下面我的回答,^(?:(2)|3)\d{3} \d{4} \d{4} \d{4}(?(1) \d)$,这些数字位于模式的开头,可以轻松调整。
  • @wiktorstribizew 它工作得很好也感谢您的解释,感谢您,我已经设法解决了另一个问题!完美

标签: php regex


【解决方案1】:

最明显的解决方案是使用两种替代方案:

^(?:2\d{3} \d{4} \d{4} \d{4} \d|3\d{3} \d{4} \d{4} \d{4})$

请参阅regex demo

^ 匹配字符串的开头,2\d{3} \d{4} \d{4} \d{4} \d 匹配以2 开头的数字,3\d{3} \d{4} \d{4} \d{4} 匹配以3 开头的数字。

但是,在 PHP PCRE 正则表达式中,您可以使用条件。在这里,您可以将模式缩短为

^(?:(2)|3)\d{3} \d{4} \d{4} \d{4}(?(1) \d)$

this regex demo。在这里,(?:(2)|3) 匹配并捕获到第 1 组 2 数字,或匹配 3(?(1) \d) 模式检查组 1 是否匹配,如果匹配,则在字符串末尾需要一个空格和一个数字。

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多