【问题标题】:how can I get a regex that allows only 0000 or spaces我怎样才能得到一个只允许 0000 或空格的正则表达式
【发布时间】:2012-04-19 15:51:17
【问题描述】:

我怎样才能得到一个只允许 0000 或空格,但不能同时允许的正则表达式

例子:

  1. 0000000000000000000 --> 好的;
  2. 只有空格 --> OK;
  3. 000000000 0000 --> 不行;
  4. afads0000 00 0fd --> 不行;

【问题讨论】:

  • 类似(不确定javascript版本):/^(0+|\s+)$/
  • @Tim Pietzcker,谢谢,现在我也意识到了 :)
  • 当您说“不是两者”时,是否还包括连续的0s 周围的前导和尾随空格,例如" 0000 "

标签: javascript regex


【解决方案1】:
^(?:0+| +)$

说明:

^      # Start of string
(?:    # Either match (but don't capture)...
 0+    # one or more zeroes
|      # or
 [ ]+  # one or more spaces
)      # End of non-capturing group (used to contain the alternation)
$      # End of string

【讨论】:

  • ?: 表示它是一个非捕获组
  • @F.Calderan:对;我已经相应地改进了我的解释。
  • @gdoron:嗯,它在解释中(“一个或多个”)。
  • @TimPietzcker。不贪心不见了,不是吗?
  • @gdoron:你什么意思?贪与不贪都无所谓。 (当然它贪婪的。)
【解决方案2】:

编辑:此答案仅适用于您允许前导和/或尾随空格的情况。在导致失败的空格问题中给出的唯一示例是空格分隔0 序列的位置。

如果没有,您将需要一个正则表达式,例如 @Tim Pietzcker's answer


您可以进行 toNumber 转换而不是正则表达式,因为只有空格的字符串将被转换为 0,并且前导/尾随空格将被忽略。

这里我使用一元+ 运算符进行toNumber 转换。

if (+str === 0) {
   // pass
}

需要注意的是,空字符串也将转换为0。如果不需要,您可以先测试.length

if (str.length && +str === 0) {
   // pass
}

"0000000000000000000"  // pass
"   000   "            // pass
"       "              // pass
"000000000 0000"       // fail
"afads0000 00 0fd"     // fail

""  // pass first solution, fail second solution

【讨论】:

  • Number(" 000") 也会返回 0,不是吗?
  • @TimPietzcker:是的,也许我错误地将其解释为需求。
  • ...更新包括关于前导/尾随空格的警告。
【解决方案3】:

这应该可以:(0+)|( +),不是吗?

【讨论】:

  • 这仍然匹配abc000def的中间部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多