JavaScript charAt()不';我不喜欢非';零度

JavaScript charAt()不';我不喜欢非';零度,javascript,html,Javascript,Html,这可能是一个愚蠢的问题或打字错误,但我还是要问。。。我有下面的表单,提交表单时,我想检查输入type=“number”的所有值,并确保如果用户出于某种原因在输入的开始处放一个零,例如01、025、0100,只要值不是零,就删除第一个零。使用jQuery选择器,一个简单的JavaScript变得更加简单。请注意,这里的所有文本框都是type=“number”而不是type=“text”,请注意我的输入 这是我的密码: $('input[type=number]').each(function()

这可能是一个愚蠢的问题或打字错误,但我还是要问。。。我有下面的表单,提交表单时,我想检查
输入type=“number”
的所有值,并确保如果用户出于某种原因在输入的开始处放一个零,例如01、025、0100,只要值不是零,就删除第一个零。使用jQuery选择器,一个简单的JavaScript变得更加简单。请注意,这里的所有文本框都是
type=“number”
而不是
type=“text”
,请注意我的输入

这是我的密码:

$('input[type=number]').each(function(){
    // only if the string is not zero
    if(this.value.charAt(0) == "0" && this.value != "0"){
        this.value = this.value.substring(1);
    }   
});
然而,当我回来全面测试我的表单时,我注意到我的代码不起作用!因此,我添加了以下内容以写入控制台以检查发生了什么:

console.log(“typeof:+typeof(this.value)+”“+this.id+”char:+this.value.charAt(0)+”val:+this.value)

这给了我以下输出,请注意最后4项的值不为零:


当用户更改了默认值0时,为什么我没有得到
this.value.charAt(0)

由于某种原因,前面似乎有空白-在检查零之前使用jQuery的trim函数以确保已消除空白。

这可以稍微减少:

$('input[type=number]').each(function() {
    this.value = this.value.replace(/^\s*0+(?=\d)/, '');
});

这将删除任何前导零,即使前导有空格(这可能是您的问题)。

您的值中似乎有空格。在比较之前对其进行修剪(例如,使用,或者如果您不想仅为此而包括jquery):


上面的解决方案删除了任意前导零,该部分是从中提取的。

可能是输入中有空格吗?@nyarlathotep:把它作为一个答案,我再加上一个给你。输出显示了“val:”和“04”之间的空格(作为上一个示例)。@nyarlathotep:作为回答,这肯定是一个前导空格问题。作为旁注,您的代码是否处理多个零?乍一看,“001”的输入似乎会被修剪为“01”,这可能不是我们想要的……整洁干净,我喜欢:)但我在0后面加了+使其也删除了多个前导零!也不知道长相如何,又学到了一点:D!是的-在JS中没有lookbehinds,虽然这是非常烦人的。好的观点:多个前导零-已编辑。
$('input[type=number]').each(function(){
    // only if the string is not zero
    var myval = $.trim(this.value);
    this.value = myval.replace(/^[0]+/g,"");

});