正则表达式只对javascript提示符号进行验证

时间:2011-08-27 22:21:18

标签: javascript regex if-statement prompt

我有一个弹出提示窗口的页面,并提示用户输入姓名。我正在尝试为提示窗口编写验证。点击取消或留空是工作正常,但我坚持的是确保用户只输入字母。以下是我所拥有的。

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个字母。建议?

4 个答案:

答案 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方法testexecmatch。对于您的情况,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;               
    }