Javascript表单验证 - 只有第一个字符必须是数字

时间:2014-03-02 00:45:05

标签: javascript forms validation

我被困在表格的一小部分上 - 我想这样做只是街道地址字段的第一个字符是数字,其余部分可以是任何字符。我已经摆弄了使用indexOf以及reg ex ..我接近了,但并不完全。

任何建议都将不胜感激!

window.onload=function()
{
    document.forms[0].onsubmit=function()
    {

        for(i = 0; i < this.elements.length; i++)
        {
            //alert required field
            if(this.elements[i].className.indexOf("required") != -1)
            {
                if(this.elements[i].value == "")
                {
                    alert("required field");
                    this.elements[i].focus();
                    return false;
                }   

            } 


            //username requirements
            var userLength = document.getElementById("user")

            if((userLength.value.length < 5) || (userLength.value.length > 10))
            {
            alert("username must be between 5-10 characters");
            return false;
            }


            //email address requirements
            var emailMust = document.getElementById("email")

            if((emailMust.value.indexOf("@") == -1) || (emailMust.value.indexOf(".") == -1))
            {
                    alert("email must contain proper characters");
                    return false;
            }


            //address requirements
            var address = document.getElementById("address")
            var regex = new RegExp('/^[0-9]{1}[a-zA-Z0-9]$/');

            if(address.match(regex))
            { 
                alert("address must begin with a number");
                return false;
            }



            //birth year requirements
            var birthYear = document.getElementById("birth")

            if(isNaN(birthYear.value))
            {
                alert("birth year must be a number");
                return false;
            }


        } 

    } 
} 

这是我的html部分:

<form action="#">

<p><label for="user">Username:</label>*</p>
<p><input type="text" class="required" id="user"></p>

<p><label for="email">Email Address:</label>*</p>
<p><input type="text" class="required" id="email"></p>

<p><label for="address">Street Address:</label></p>
<p><input type="text" id="address"></p>

<p><label for="birth">Year of birth:</label>*</p>
<p><input type="text" class="required" id="birth"></p>

<br>
<input type="submit">
<p><i>* required field</i></p>

3 个答案:

答案 0 :(得分:4)

更改以下行

var regex = new RegExp('/^[0-9]{1}[a-zA-Z0-9]$/');

var regex = new RegExp('^[0-9]');

由于您的要求是只是街道地址字段的第一个字符是数字,其余字符可以是,您的正则表达式应仅关注第一个字符。如果必须指定另一个字符类,则它不应该像[a-zA-Z0-9]那样窄。请记住,有效地址可能包含逗号,连字符,空格等字符。

答案 1 :(得分:1)

您也可以使用:

var regex = new RegExp('/^[0-9]{1,}[a-zA-Z0-9]*$/');

以下是{}的工作原理:

a{3}    Exactly 3 of a
a{3,}   3 or more of a
a{3,6}  Between 3 and 6 of a

我还要指出,你的模式并不考虑数字之后的空格。例如,它与123 Rod Street不匹配。我还会在你的集合中包含一个空格(在字母a之前)

例如:

new RegExp('/^[0-9]{1,}[ a-zA-Z0-9]*$/');

更新::

我会留下正斜杠,因为你将它作为字符串传递它会自动逃脱!!

new RegExp('^[0-9]{1,}[ a-zA-Z0-9]*$'); 

答案 2 :(得分:1)

您可以尝试将第一个char转换为它的序数值,并将其与ASCII数字文字的范围进行比较。

var addressValid = address.value.charCodeAt(0);
addressValid = (addressValid >= 48 && addressValid <= 57)

如果第一个char是数字(0-9),则值addressValid将为true。一切都很简单,没有正则表达。

当然,您可以通过直接访问address.value.charCodeAt(0)中的if来完成所有这些操作,但这仅用于演示目的,因此更加详细。