【问题标题】:Regular expression number starting with zero,one or more whitespaces followed by plus or minus正则表达式数字以零、一个或多个空格开头,后跟加号或减号
【发布时间】:2017-05-22 13:29:44
【问题描述】:

我有以下正则表达式;

^(\s)*[+-]?\d+$

如果输入在第一个非空白字符之前包含多个空白,则会失败。 目前它正在研究下一个示例

- :false
-1 :true
+1 :true

如果开头有 0,1 个或更多空格,我想要的是相同的逻辑:

: true (empty input string)
    : true (one or more spaces)
  -: false
  -1: true
   +1: true
   235: true 

我在这里匹配数字,但在更一般的方案中,如果有十进制,我希望有相同的行为,在一些特殊的词等上。 所以,基本上,如果开头有任意数量的空格或空字符串,我希望我的正则表达式匹配,然后是我想要匹配的内容(数字、电子邮件、特殊词......)

【问题讨论】:

  • 你为什么要对空白进行分组?只需使用\s*

标签: regex


【解决方案1】:

您需要使用 optional 分组结构使整个模式成为可选,并将\s* 放在组之前

^\s*(?:[+-]?\d+)?$
    ^^^        ^^

regex demo

详情

  • ^ - 字符串的开头
  • \s* - 0+ 个空格
  • (?: - 非捕获组的开始(如果引擎不支持非捕获组,删除?:)匹配...。
    • [+-]? - 可选(1 或 0 次出现)+- 符号
    • \d+ - 1 位以上
  • )? - .... 1 或 0 次
  • $ - 字符串结束。

【讨论】:

  • 如果我只输入一个空格,它就不起作用,它被评估为假。如果用户留下空字符串或输入 1 个或多个空格,则应将其评估为 true。语义相同,用户未提供任何输入数据,应忽略所有前导空格或将其评估为 true
  • @Error: 你没有提供那个测试用例。我将它添加到演示中。请参阅更新的答案。如果您还想允许 尾随 空格,请在 \d+ 之后添加 \s*
【解决方案2】:

我想你想把星号和 \s 放在一起:

^\s*[-+]?\d+$

【讨论】:

  • 空字符串计算为假,任意数量的空格也计算为假。
猜你喜欢
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多