【问题标题】:Form Validation to Allow 6 or 9 numbers Only?表单验证仅允许 6 或 9 个数字?
【发布时间】:2020-06-17 04:37:07
【问题描述】:

我有一个表单,其中的字段仅接受用于访问代码的数字。访问代码是 6 位或 9 位数字。目前我正在使用

验证该字段
elseif (( ! is_numeric($values['access'])) || ! preg_match('/[0-9]{6,9}$/', $values['access']))

允许 6 到 9 个数字。我怎样才能只允许 6 或 9 个数字?

我猜是这样的

elseif (( ! is_numeric($values['access'])) || ! preg_match('/[0-9]{6}[0-9]{9}$/', $values['access']))

但我们都知道这行不通。有人能指出我正确的方向吗?

【问题讨论】:

  • ^[0-9]{6}$|^[0-9]{9}$?
  • strlen 够了
  • 当提到字符 0-9 时,您应该使用术语“数字”而不是“数字”,因为在某些情况下,一串数字可能被解释为表示单个“数字”。

标签: php regex forms validation preg-match


【解决方案1】:

(a|b) 将匹配 a 或 b。所以!

^(\d{6}|\d{9})$

将匹配 6 个数字或 9 个数字。

你可以在这里测试https://regex101.com/r/Chx10H/1/

【讨论】:

  • 虽然我更喜欢你的回答,但^(?!\d{7,8}$)\d{6,9}$ 也可以。 (?!\d{7,8}$) 是一个负前瞻,可防止长度为 7 或 8 的字符串匹配。
【解决方案2】:

更高效的方法,需要27步(接受答案36步):

  ^\d{6}(?:\d{3})?$

Demo & explanation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多