【发布时间】:2012-07-27 16:10:00
【问题描述】:
我有一个问题要问你,我自己似乎无法弄清楚。
假设我想验证用户的名字。有些可以包含多个部分,例如“John William”,中间有一个空格。我想要做的是将输入匹配到一个正则表达式,该表达式会找出名称是否在开头或结尾包含任何空格。
此外,正则表达式应该检查名称中是否只有字母(a-z,小写和大写)。
这是我目前想出的:
/^\s+[A-z]+|[A-z]+\s+$/
但不知何故,这个正则表达式不会注意到任何其他字符(如破折号、下划线、& 符号等)。基本上它所做的只是告诉我输入的开头或结尾是否有空格。
谁能帮帮我?
编辑:
这是我正在使用的完整代码:
$(document).ready(function() {
$('#firstname, #lastname').bind('keyup blur', function() {
var _input = $(this);
var _illegal = Validate_Regexp(_input.val(), /^\s+[A-Za-z]+|[A-Za-z]+\s+$/);
if (_illegal == true) {
$("#"+_input.attr('id')+".validator").css({
'background-image' : 'url(./images/icons/bullet_red.png)',
});
} else {
$("#"+_input.attr('id')+".validator").css({
'background-image' : 'url(./images/icons/bullet_green.png)',
});
}
});
});
function Validate_Regexp($value, $regexp) {
return $regexp.test($value);
}
编辑 2:
我同意 Charlie 的回答,但他的回答迫使我使用名称的 2 部分,而不是我想要的。
我将代码更改为:
var isLegal = /^[a-zA-Z]+(\s+[a-zA-Z]+)?$/.test(stringToTest);
到:
var isLegal = /^[a-zA-Z]+(\s[a-zA-Z]+)*?$/.test(stringToTest);
【问题讨论】:
-
要检查大小写字母,请使用
[a-zA-Z] -
@kontur [A-z] 所做的与 [a-zA-Z] 基本相同。但这仍然没有帮助我的结果。事实上,它只会让情况变得更糟,如果在中间的空格之后实际上有第二部分,则只会在最后检查输入是否有空格。
-
我不知道,只是以前从未见过这种书写形式。即使在developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions 上,似乎也明确使用了 a-z 和 A-Z - 可能只是为了清楚起见。
标签: javascript regex