【问题标题】:Pregmatch Validation for allowing only one special characterPreg_match 验证只允许一个特殊字符
【发布时间】:2016-01-15 12:07:50
【问题描述】:

我需要一个 pregmatch 来检查 10 个字符串,它只允许最大长度为 10 的数字和字母后跟连字符 (-),因此长度应为最大 11。

这意味着如果用户输入 10 个数字或字母,则字符串的最大长度应为 10,如果输入一个连字符,则字符串的长度应为 11。

^(?=.{0,10}$).* 是我目前使用的模式。它只允许 10 个字符,但接受任何特殊字符。

【问题讨论】:

  • 你能显示你当前的正则表达式吗?有效字符串应始终包含 10 个字符,但如果是特殊的 11 个字符。或者它可以是可变长度有效:1-10,但如果特殊:11?
  • ^(?=.{0,10}$).* 是我目前使用的预匹配。它只允许 10 位数字,但接受任何特殊字符。

标签: javascript regex preg-match


【解决方案1】:

如果您想在字符串中的任意位置最多允许一个连字符但不允许 11 个字母数字,请尝试

^(?=[a-zA-Z0-9-]{0,11}$)(?![a-zA-Z0-9]{11})[^-]*-?[^-]*$
  • (?=[a-zA-Z0-9-]{0,11}$) 检查是否仅由字母数字字符 + 连字符组成
  • (?![a-zA-Z0-9]{11}) 否定前瞻禁止不带连字符的 11
  • [^-]*-?[^-]*$ 字符串中任意位置的一个可选连字符

See demo at regex101

【讨论】:

  • 我们可以将其更改为只允许连字符(-)作为特殊字符吗?
  • @user1755949 当然,只需将[^[:alnum:]] 替换为- like this
  • 感谢您的回答。但是我在使用这个之后得到了“SyntaxError: invalid regexp group”。我在文本框上使用预匹配并在 javascript 中进行验证。但在 javascript 中,我在验证时收到此错误。
  • @user1755949 试试^(?=[a-zA-Z0-9-]{0,11}$)(?![a-zA-Z0-9]{11})[^-]*-?[^-]*$ JS 不支持 posix 类或条件。这将允许在 1-11 的字符串中使用连字符,但不允许仅包含 11 个字母。
  • @user1755949 请将此答案打上绿色勾号,以便未来的 SO 读者知道此问题已成功回答。
猜你喜欢
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多