我正在尝试用JavaScript学习正则表达式测试,但我发现很难想象。在下面的示例中,我尝试测试用户输入的名字,以确保它没有:
这是我的功能到目前为止,做任何明显的语法错误,特别是在reg表达式中脱颖而出?感谢。
<script language="javascript" type="text/javascript">
function nameValidate() {
var input = document.forms['myForm']['fName'].value;
var re = /\d\s{2,}\W/;
if (input == "") { // Make sure there is something filled out
document.getElementById('fNameError').style.color = "red";
document.getElementById('fNameError').innerHTML = "** You must enter a name";
}
else if (re.test(input)) {
document.getElementById('fNameError').style.color = "red";
document.getElementById('fNameError').innerHTML = "** Names must contain only letters a-z or A-Z and no more than one space between names";
}
}
</script>
答案 0 :(得分:2)
这是你要问的正则表达式:
var re = /^[a-zA-Z]+(?: [a-zA-Z]+)?$/;
如果匹配,则表示输入有效。
说明:
^
... $
锚定正则表达式,因此它必须匹配整个字符串,而不仅仅是其中的任何子字符串[a-zA-Z]+
匹配一个或多个连续字母(?:
... )
只是一个分组表达式[a-zA-Z]+
?
如果您愿意,也可以应用变体,例如[A-Z][a-z]*
而不是每个[a-zA-Z]+
将确保每个名称以大写字母开头,并且在第一个字母后面只包含小写字母。
答案 1 :(得分:1)
根据您的描述,此正则表达式将更适合您:
var re = /^[a-z]+( [a-z]+)?$/i;
然后将re.test
反转为:
else if (!re.test(input)) {
document.getElementById('fNameError').style.color = "red";
document.getElementById('fNameError').innerHTML = "** Names must contain only letters a-z or A-Z and no more than one space between names";
}