javascript - 正则表达式(只有 1 点)

标签 javascript jquery regex

我有一个正则表达式,我可以替换所有非数字的内容:

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

我如何确保它只允许 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);
}

关于javascript - 正则表达式(只有 1 点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630564/

相关文章:

JavaScript错误: Why I cannot clone/copy a tag from "li" to "table"?

php - preg_replace 删除特殊字符

javascript - 动态构建 Twitter Bootstrap 模式

javascript - 如何在 Django 中实现这个 - 后退按钮 - 保留请求中的数据

javascript - 如何混合网页之间的过渡,给人一种访问者从未离开过页面的错觉?

javascript - 如何为以@开头或以,结尾的字符串匹配编写正则表达式?

regex - 我如何重复正则表达式

javascript - 巴巴图斯 :star-rating error in meteor js

javascript - 使用 jquery 将匹配的单词包装在链接中

javascript - 单击 div 后将内容推送到 div 的隐藏输入