我被困在表格的一小部分上 - 我想这样做只是街道地址字段的第一个字符是数字,其余部分可以是任何字符。我已经摆弄了使用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>
答案 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
来完成所有这些操作,但这仅用于演示目的,因此更加详细。