簡體   English   中英

帶小數的正數和負數的負匹配正則表達式

[英]Negative match regex for positive and negative numbers with decimals

我有正則表達式,它確保任何不符合以下條件的字符都被替換為空字符串:

  • 必須是數字。
  • 可選地可以是正的或負的。
  • 可選地可以有十進制值,但不是尾隨小數點。

我的問題:如果在數字前面找到負號,我無法弄清楚如何保留它。 我的正則表達式當前用空字符串替換了 '-' 的所有實例。 我在這里遺漏了一些東西以確保不會發生此問題

 var testId = document.getElementById('test'); var validate = value => { let regex = /([^\\d.-]+)|([^\\.?\\d]+)/g; return value.toString().trim().replace(regex, ''); }; // Note: in comments, the expected output var values = [ '12345', // 12345 '-12345', // -12345 '12345.6789', // 12345.6789 '-12345.6789', // -12345.6789 '-123-45.-6789', // -12345.6789 '$12345a6', // 123456 '-1abcde+^~2345.6*#zZ789', // -12345.6789 '50-00', // 5000 '$12345' // 12345 ]; values.forEach(value => { testId.innerHTML += `<p>${value} ==> ${validate(value)}</p>`; });
 <div id="test"></div>

您可以使用

return value.toString().trim().replace(/[^\d.-]+/g, '').replace(/^(-)|-/g, '$1');

這里,

  • .replace(/[^\\d.-]+/g, '') - 刪除除數字、點和連字符以外的所有字符
  • .replace(/^(-)|-/g, '$1') - 只保留字符串中的第一個連字符並刪除所有其他連字符。 關鍵是(-)將開頭的連字符( ^表示字符串的開頭(-)捕獲到組 1 中,您可以從替換模式中使用$1反向引用訪問該組, |-表示“或僅匹配的連字符處於非初始位置。

請參閱 JavaScript 演示:

 var testId = document.getElementById('test'); var validate = value => { return value.toString().trim().replace(/[^\\d.-]+/g, '').replace(/^(-)|-/g, '$1'); }; // Note: in comments, the expected output var values = [ '12345', // 12345 '-12345', // -12345 '12345.6789', // 12345.6789 '-12345.6789', // -12345.6789 '-123-45.-6789', // -12345.6789 '$12345a6', // 123456 '-1abcde+^~2345.6*#zZ789', // -12345.6789 '50-00', // 5000 '$12345' // 12345 ]; values.forEach(value => { testId.innerHTML += `<p>${value} ==> ${validate(value)}</p>`; });
 <div id="test"></div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM