JavaScript移除输入字段的值

3

我想检查当用户输入“,”或“.”时,然后删除“.”或“,”并用:00替换它。

例如,用户输入2.5,则结果应为2:00。

到目前为止还没有什么特别的,但不知何故我的整个输入字段被清除了,只剩下新值:00。

    if($('#enterTime').val().indexOf("." || ",") !=-1){
        $('#enterTime').val($('#enterTime').val().replace(/./g, ""));
        $('#enterTime').val($('#enterTime').val().replace(/,/g, ""));
        $('#enterTime').val($('#enterTime').val() + ':00');
}

1
"." 是正则表达式中的特殊字符。如果想匹配一个真正的 "." 字符,你需要使用 "."。 - CodingIntrigue
3个回答

6
在正则表达式中,. 表示“除换行符外的任意字符”,因此只需使用反斜杠进行转义即可:
/\./g

您可以通过以下方式进一步简化操作:

var time = $('#enterTime');
time.val(time.val().replace(/(\.|\,)/g, ":00"));

在这种情况下,我已经添加了|表示“要么,.”,使您的正则表达式匹配两者。我添加了()来封装它。
这是一个(无关的)正则表达式的实现:

var text = document.getElementById('text');
text.textContent = text.textContent.replace(/(\.|\,)/g, ":00");

var text = document.getElementById('text2');
text.textContent = text.textContent.replace(/(\.|\,)/g, ":00");
<p>The original text was: 2,</p>
<div id="text">2,</div>

<p>The original text was: 2.</p>
<div id="text2">2.</div>


恭喜,你比我早30秒回答了我想到的问题。非常好的答案。 - Erick Petrucelli
问题在于,我的结果现在看起来像这样2:005:00。 - TamoDaleko
@TamoDaleko 不,这不是这个的问题 - 这是你软件逻辑的问题。 - CodingIntrigue
1
因为这个答案完全按照你在问题中所要求的做法。它可能不是你想要的,但你需要提出另一个问题来得到答案。 - CodingIntrigue
这段代码很短且完美地工作着。问题是用户输入。所以我尝试了这个:链接。有人可以解释一下上面的代码与输入元素的奇怪行为吗? - J Santosh

1
尝试这个。

Update();
function Update() {
    var value = $('#enterTime').val();
    value = value.replace(/(\..*|\,.*)/g, ":00")
    $('#text3').text(value)
}

$('#enterTime').keyup(function () {
    Update();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='enterTime' value='2.00500'> <span id="text3"></span>


它能工作,但是看起来对于它的目的来说非常冗长,并且缺少很多优化。你最好使用 replace 而不是 substring 并减少代码行数。 - somethinghere
@somethinghere,感谢您的建议。我使用了您的正则表达式,并进行了小修改 /(\..*|\,.*)/g 来更新我的代码,这样在 ., 后面无论是什么都将被替换为 :00 - J Santosh

0

在使用正则表达式时,使用\转义特殊字符。

$('#enterTime').val($('#enterTime').val().replace(/\./g, ":00"));
$('#enterTime').val($('#enterTime').val().replace(/\,/g, ":00"));

演示

在indexOf中使用||是不正确的。请使用以下方法

if($('#enterTime').val().indexOf(".") !=-1 || $('#enterTime').val().indexOf(",") !=-1){
    $('#enterTime').val($('#enterTime').val().replace(/\./g, ":00"));
    $('#enterTime').val($('#enterTime').val().replace(/\,/g, ":00"));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接