[英]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.