【问题标题】:Regular expression to accept both positive and negative numbers接受正数和负数的正则表达式
【发布时间】:2019-09-24 04:12:14
【问题描述】:

我需要一个正则表达式来帮助我接受正数和负数

我用过^-?\d*(.\d+)?$表达式

validateNegativeNumber(e: any) {
   let input = String.fromCharCode(e.charCode);
        const reg = /^-?\d*(.\d+)?$/;
        if (!reg.test(input)) {
            e.preventDefault();
        }
    }

Expected result: 5, +5, -5, 0
Unexpected results: 1.5, -1.5, 5++++, ++5, ---5, 5--, 50--6

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    您错过了检查+ 符号。也不需要捕获组。

    使用这个:

    ^[+-]?\d+$

    1. 可选的+- 开头的符号
    2. 后跟一位或多位数字直到结束

    Demo

    【讨论】:

      【解决方案2】:

      您可以在 HTML 中使用input 标签的pattern 属性,如下所示:

      <input pattern="^[+-]?\d+$">
      

      解释:pattern 属性可用,最好使用而不是调用验证输入的函数。那将是一项额外的工作。

      希望对你有帮助。

      【讨论】:

      • 即使后面没有数字,它也会匹配+-,我认为您必须使用\d+ 而不是\d*
      • 我会建议你添加一些解释,为什么 OP 的代码不起作用以及为什么你的代码会起作用,这将帮助他们学习新事物,而不是仅仅想知道它是魔法,无论如何 +1跨度>
      【解决方案3】:

      使用这个,接受正数或负数。

      ^-?[0-9]\d*(\.\d+)?$
      

      【讨论】:

        【解决方案4】:

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

        解释:

        ^ 匹配字符串的开头(因此“abc212”不会验证)

        [+-]? 第一个允许的字符是 + o - 匹配 0 或 1 次出现(?)。请注意,如果您不想要+ 符号,您可以只写-?,因此正则表达式将验证匹配0 或1 次出现的- 作为第一个字符

        \d+之后你可以有任意数量的数字(至少一个,因为我们使用+

        (?:\.\d+)? 最后我们可以有 0 或 1 次出现(由 ? 给出)点 (\.) 后跟任意数量的数字 (\d+)。请注意,组开头的?: 表示这是一个“非捕获组”)

        $ 匹配字符串的结尾(所以 "231aaa" 不会生效)

        【讨论】:

          【解决方案5】:

          这个怎么样?

          const reg = /^[+-]?\d*(\.\d+)?$/;
          
          const valids = ['+5', '-5', '5', '-5', '-0.6', '.55', '555.124'];
          
          const invalids = ['--5', '5+', '5-'];
          
          
          console.log('testing for valids array');
          
          valids.forEach(valid => {
            console.log(reg.test(valid));
          });
          
          console.log('testing for invalids array');
          
          invalids.forEach(invalid => {
            console.log(reg.test(invalid));
          });

          【讨论】:

          • 这与我的回答有何不同?
          • 我提供了一些测试数据来证明正则表达式有效?
          • 你为什么要评论?我们有同样的方法吗?你认为我只是复制了你的正则表达式吗?
          • 在您修改正则表达式之前,我们采用了相同的方法。那是我评论的时候。只要您提供其他几种解决问题的方法,都欢迎。
          • 我没有反应过度。我只是问两个答案之间是否有什么不同,因为我很可能一开始就错过了发现差异。这是一个尽可能礼貌的问题。
          猜你喜欢
          • 2017-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-27
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          相关资源
          最近更新 更多