【问题标题】:Select all non-digit characters except single dot and single dash选择除单点和单破折号以外的所有非数字字符
【发布时间】:2018-03-09 15:36:08
【问题描述】:

我正在寻找 JavaScript 中的正则表达式,它将选择除单个点和单个破折号之外的所有非数字字符。我试过[^0-9\.\-]+,但它没有选择多个点或破折号。所以它应该选择..而不是.

我的用例是数字输入验证。用户可以键入任何数字或单点或单破折号。我将用空字符串替换无效的输入。

【问题讨论】:

  • 你能发布带有匹配子字符串的输入示例吗?
  • 您的描述不清楚。您将如何使用这样的正则表达式? (这是 XY 问题吗?)
  • 这是否意味着-.- 是有效输入但-- 不是?
  • @melpomene,你说得对,-.- 也应该是无效的。它增加了复杂性:)
  • 所以你真的只是想确保输入是一个有效的整数或浮点数,这意味着单个点或破折号也应该是无效的?如果是这样,我不会打扰正则表达式。只需使用parseFloat(input_data) 看看你是否得到NaN

标签: javascript regex


【解决方案1】:

您应该能够使用以下内容:

(?:[^0-9\.\-]|\.{2,}|-{2,})+

它匹配既不是数字也不是.-的字符,或者两个或多个.-的序列。

该交替被放在(?:non-capturing group) 中,以便使用量词+ 重复它,而不会创建无用的捕获组。

请注意,您不必在字符类中转义.,也不必在字符类的第一个或最后一个位置转义-(?:[^0-9.-]|\.{2,}|-{2,})+ 应该也可以。

Regex101 sample.

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 2022-09-27
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多