我正在制作Windows Vista simulator,目前我正在努力让产品密钥激活。我正在使用JavaScript和正则表达式来格式化输入的文本值,以获得由破折号分隔的五组五个字符的大写集合,我试图通过以下代码实现:
$('#input-product-key').on('input', function() {
if (!!$(this).val()) { var text = $(this).val().replace('-','').toString().toUpperCase().match(/.{1,5}/g).join("-"); $(this).val(text); }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="text" id="input-product-key" maxlength="25">
&#13;
但是,在第12个字符添加到框中后,破折号会添加到不应该越来越多的位置,并且按退格键会添加更多破折号。这是为什么?
答案 0 :(得分:3)
只需用此.replace('-', '')
替换第一个replace
:
.replace(/-/g,'')
由于先前只会替换第一个-
; <{1}}标志将确保使用后者替换每个短划线。
g
$('#input-product-key').on('input', function() {
if (!!$(this).val()) { var text = $(this).val().replace(/-/g,'').toString().toUpperCase().match(/.{1,5}/g).join("-"); $(this).val(text); }
});