0

因此,我在我的 HTML5 模式属性中为 iPhone 数字键盘使用了最小的正则表达式 [0-9]*。我还有一个提交功能,可以通过服务器发送电子邮件。一切正常,直到我意识到它正在尝试发送表单,而不管浏览器是否试图阻止基于不正确的用户输入的提交。

所以我做了以下但不能让它工作:

<script>
function validate(){
    var phone=/[0-9]*/;
    var x=document.forms["form"]["contactnum"].value;
    if (x!=phone){
        alert("Contact Number must be a valid phone number (no dashes)");
        return false;
    }

    else {
        alert("Thank you! We have received your information and will contact you shortly.");
        ajax('{{=URL('new_post')}}',['phone'], 'target');
            return false;
    }
}
</script>

问题是我只有在 if 语句中设置 if (x==null || x=="") 才能让它工作。如果我尝试将它与任何其他 var 匹配,它总是会说我不匹配 [0-9]*。我已经写了几个复杂的正则表达式,但真的不想在这个简单的表单上使用任何东西。我只想要 iPhone 上的数字键盘,如果它不是数字或 null,则不提交。我什至不在乎他们是否在电话中输入“2”,只要是数字即可。

谢谢。

4

3 回答 3

3
if ( x.match(/^[0-9]+$/) ) {
  // valid
} else {
  // invalid
}
于 2012-06-01T18:48:11.060 回答
2

这不是你使用正则表达式的方式:

if (!phone.test(x)) ...

此外,如果您想匹配一个只有数字的字符串,请尝试

var phone = /^\d*$/;

这也将匹配空字符串;如果您想要至少一位数字,请使用+而不是。*

于 2012-06-01T18:47:48.560 回答
1

您实际上似乎在这里有两个问题。对于第一部分,您没有展示如何使用validate(),但请记住 onsubmit 处理程序本身必须返回 false 以阻止浏览器完成正常的提交过程。例如,以下将不起作用:

$('#myform').submit(function(){
    validate();
});

但这成功停止默认提交过程:

$('#myform').submit(function(){
    return validate();
});

validate()将返回 false,然后您的处理程序返回相同的值。

于 2012-06-01T18:48:04.723 回答