【问题标题】:regex (only 1 dot)正则表达式(只有 1 个点)
【发布时间】:2018-04-03 12:51:02
【问题描述】:

我有一个正则表达式,我替换所有不是数字的东西:

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

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

(我知道你可以只输入数字(这对我来说不是这个项目中的一个选项))

【问题讨论】:

标签: javascript jquery regex


【解决方案1】:

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

  1. . 分割一个字符串,然后只将数组的前两个元素(使用.splice(0,2))与. 连接起来,其余的则什么都没有
  2. 使用简单的正则表达式模式替换所有非数字和非句点字符:/[^\d\.]/gi

这是一个示例代码:

// 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);
}

【讨论】:

    【解决方案2】:

    我解决了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2013-10-03
      相关资源
      最近更新 更多