.replace不删除字符

时间:2014-06-17 20:58:14

标签: javascript jquery html regex

所以我尝试将PX转换为EM,但如果用户输入16px,而不是16,我想删除PX。这就是我使用

的内容
.replace(/^EM+/i, '')

但由于某种原因,它没有删除。

Here's a demo。使用PX输入任意值,您就会获得NaN。还有一种方法可以抑制NaN,以便它不会显示出来吗?

6 个答案:

答案 0 :(得分:1)

我对此的理解是^字符指定了行的开头,+字符指定必须至少有一个字符... This example works

.replace(/EM+/i, '')

答案 1 :(得分:0)

分叉小提琴:http://jsfiddle.net/FDkLa/

请勿使用^,因为它告诉您匹配字符串的开头

答案 2 :(得分:0)

^匹配字符串的开头,因此这只会在开头删除px。请改用:

.replace(/EM/i, '')

+也是不必要的; M+它匹配1个或多个M&#(例如" EMMM"匹配)。

答案 3 :(得分:0)

你去。

剥离所有只留下数字的字符。不再是NaN。

编辑:好的,用巨大的数字修复了问题。

在此确认Latest Version

$(document).ready(function () {
  $('.px').keyup(function () {
    var px = $(this).val().replace(/\D/g,'');
    var rep = (px / 16);
    $('.em').val(rep);            
  });    
  $(".em").keyup(function () {
    var em = $(this).val().replace(/\D/g,'');
    var rem = (em * 16);
    $('.px').replace().val(rem);
  });     
});

答案 4 :(得分:0)

你可能想在你的事件监听器中尝试这样的事情:

var val = this.value;
if (/^\d+(?:px)?$/i.test(val)) {
    // do conversion stuff
} else {
    // display error to user, perhaps a red border on the input
}

答案 5 :(得分:0)

最简单的方法可能是删除[0-9\.]上所有不是keyup(句号或数字)的字符。然后,您可以执行计算并更新<input> s。

fiddle

<强> HTML

px <input type="text" id="px"> <br>
em <input type="text" id="em">

<强>的JavaScript

$("#px").keyup(function () {
    var px = $(this).val().replace(/[^\d\.]+/g, "");   // replace all non 0-9 or .
    $(this).val(px);
    $("#em").val(parseInt(px)/16);               // set the value of em to px/16
})
$("#em").keyup(function(){
    var em = $(this).val().replace(/[^\d\.]+/g, "");  // replace all non 0-9 or .
    $(this).val(em);
    $("#px").val(parseInt(em) * 16);            //set the value of px to em*16
})