我有一个弹出提示窗口的页面,并提示用户输入姓名。我正在尝试为提示窗口编写验证。点击取消或留空是工作正常,但我坚持的是确保用户只输入字母。以下是我所拥有的。
var alphaExp = /^[0-9a-zA-Z]+$/;
var name=prompt("Enter your first and last name please.","");
if (name==null || name=="")
{
alert("First and last name must be filled out!");
location.reload(true);
}
else if (name==alphaExp)
{
alert("Name must contain letters only!")
location.reload(true);
}
如果我点击取消或留空,我会收到通知,必须填写该字段并刷新页面,但是如果我输入一个数字或特殊字符,它会接受它并带我到页面,它不应该吨。
我尝试过更改
else if (name==alphaExp)
到
else if (name!=alphaExp)
但这似乎与我想要的产生相反的效果,并且什么也没有接受。
我在这里缺少什么?
另外,如果我必须编写if语句以确保用户输入至少两个名字?即必须是1个字母+空格+ 1个字母。建议?
答案 0 :(得分:3)
你必须测试字符串是否与正则表达式匹配,而不仅仅是它是否相等。而不是
name==alphaExp
你应该使用
name.match(alphaExp)
(或!name.match(alphaExp)
为否定。)
如果您想强制人们输入两个名字,您可能会使用类似
的内容/^[a-zA-Z]+ [a-zA-Z]+$/
(我删除了0-9,因为你可能不想要数字。)
答案 1 :(得分:3)
你需要
else if (!name.match(alphaExp))
但请注意,在alphaExp
中,您允许的数字/数字与您的声明相反,只是您想要字母。如果您真的只想要字母,请按以下方式更改alphaExp
:
var alphaExp = /^[a-zA-Z]+$/;
同样只是一个建议,但请注意,许多姓氏(和一些名字)使用连字符( - )和单引号(')。您可能也想要允许这些字符。
关于强制输入2个名字'First Lastname'的问题,您可以使用以下内容:
var alphaExp = /^[a-zA-Z]+ [a-zA-Z]+$/;
您修改后的代码现在为:
var alphaExp = /^[a-zA-Z]+ [a-zA-Z]+$/;
var name=prompt("Enter your first and last name please.","");
if (name==null || name=="")
{
alert("First and last name must be filled out!");
location.reload(true);
}
else if (!name.matches(alphaExp))
{
alert("Name must contain letters only!")
location.reload(true);
}
答案 2 :(得分:3)
要测试RegExp,您可以使用RegExp方法test
,exec
或match
。对于您的情况,test
将是最合适和最有效的:
if (!/^[a-zA-Z]+$/.test(name)) { alert("error"); }
要匹配至少两个名称,您将使用此RegExp:
/^[a-zA-Z\-]+ [a-zA-Z]+[a-zA-Z\- ]+$/
请注意\-
,因为有些人使用带连字符的名称,并且第三个括号中的空格设置为允许两个以上的名称,但是阻止人们输入一个名称后跟空格。
答案 3 :(得分:0)
只接受小或大写的字母,无论我们可以使用
var ffirst_name=/^[a-zA-Z]+$/
if (!ffirst_name.test($first_name)) {
me('input.first_name').after('<span class="err">Please input a valid name!</span>').focus();
return false;
}