对于货币输入,我想要替换不在字符串开头的所有减号输入,或者当它是最后一个字符时,不会以逗号开头。
在输入事件中,我已经使用简单的正则表达式替换其他一些无效输入:
input.replace(/[^0-9\.\,\-]/g, '')
.replace('.', ',');
如果我可以扩展这个正则表达式以消除无效的弊端,那将是很好的。
所需行为的一些例子:
50-50
- > 5050
50,00-
- > 50,00
-5-0,-
- > -50,-
编辑:结尾或开始时的双减去也应该被剥离。
--50,00
- > -50,00
50,--
- > 50,-
我想我可以从积极的前瞻-(?=.)
开始,但仍然与第一个角色匹配。
此外,我发现this post几乎相反(开头和结尾都不允许使用),但仍然会匹配整个字符串。不是sepatate的缺点。
任何帮助都将不胜感激。
答案 0 :(得分:0)
功能正常吗?这应该可以解决问题:
function removeMinus(str) {
var prefix = str.startsWith("-") ? "-" : "";
var postfix = str.endsWith(",-") ? "-" : "";
return prefix + str.split("-").join("") + postfix
}
答案 1 :(得分:0)
使用以下方法使用特定的正则表达式模式:
da#event#add[`ALL_EVENTS];

答案 2 :(得分:0)
你可以使用单词边界\b
来做到这一点。
\b
匹配单词边界。这是一个单词字符未被跟随或前面跟另一个单词字符的位置,例如在字母和空格之间......
https://regex101.com/r/YzCiEx/1
var regex = /\b-+\b/g;
console.log("50-50".replace(regex, ''))
console.log("50,00".replace(regex, ''))
console.log("-5-0,-".replace(regex, ''))
console.log("-5------6-".replace(regex, ''))
console.log("-6--66-6,-".replace(regex, ''))