正则表达式(只有1个点)

时间:2018-04-03 12:51:02

标签: javascript jquery regex

我有一个regEx,我替换了所有内容,而不是数字:

 this.value.replace(/[^0-9\.]/g,'');

我怎样才能确保它只允许1个点 (第二个点将像其他点一样被替换)

(我知道你可以使用输入数字(这不是我在这个项目中的选项))

2 个答案:

答案 0 :(得分:3)

你可以使用一个简单的技巧:

  1. .分割字符串,然后仅将数组的前两个元素(使用.splice(0,2))与.连接,其余部分无效
  2. 使用简单的正则表达式模式替换所有非数字和非句点字符:/[^\d\.]/gi
  3. 以下是一个示例代码:

    // Assuming that `yourString` is the input you want to parse
    // Step 1: Split and rejoin, keeping only first occurence of `.`
    var splitStr = yourString.split('.');
    var parsedStr = splitStr[0];
    if (splitStr.length) {
        parsedStr = splitStr.splice(0, 2).join('.') + splitStr.join('');
    }
    
    // Step 2: Remove all non-numeric characters
    parsedStr = parsedStr.replace(/[^\d\.]/gi, '');
    

    概念验证示例:

    
    
    var tests = [
      'xx99',
      '99xx',
      'xx99xx',
      'xxxx999.99.9xxx',
      'xxxx 999.99.9 xxx',
      'xx99xx.xx99xx.x9',
      'xx99xx.99x.9x',
      'xx99.xx99.9xx'
    ];
    
    for (var i = 0; i < tests.length; i++) {
      var str = tests[i];
    
      // Split and rejoin, keeping only first occurence of `.`
      var splitStr = str.split('.');
      var parsedStr = splitStr[0];
      if (splitStr.length) {
        parsedStr = splitStr.splice(0, 2).join('.') + splitStr.join('');
      }
      
      // Remove all non-numeric characters
      parsedStr = parsedStr.replace(/[^\d\.]/gi, '');
      console.log('Original: ' + str + '\nParsed: ' + parsedStr);
    }
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

我解决了它。

this.value = this.value.replace(/.*?(\d+.\d+).*/g, "$1");