Javascript正则表达式空间检查
Javascript regular expression spaces check
我有一个问题要问你,我自己似乎无法解决
假设我想验证一个用户的名字。有些可以包含多个部分,比如"约翰·威廉",中间有一个空格。我想做的是将输入匹配到一个正则表达式,该表达式查找名称的开头或结尾是否包含空格
此外,正则表达式应该检查名称中是否只有字母(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:
我同意查理的回答,但他的回答迫使我把名字分成两部分,而不是我想要的那么多
我把代码改成了:
var isLegal = /^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test(stringToTest);
至:
var isLegal = /^[a-zA-Z]+('s[a-zA-Z]+)*?$/.test(stringToTest);
我注意到您正在检查非法字符串。让我们回过头来检查一个有效的字符串:
var isValid = /^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test(stringToTest);
结果:
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test("john doe"); // true
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test("john"); // true
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test("john d_oe"); // false
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test(" john doe "); // false
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test(" john doe"); // false
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test("john doe "); // false
/^[a-zA-Z]+('s+[a-zA-Z]+)?$/.test("john "); // false
翻译成您现有的代码:
var isValid = Validate_Regexp(_input.val(), /^[a-zA-Z]+('s+[a-zA-Z]+)?$/);
if (isValid) {
$("#"+_input.attr('id')+".validator").css({
'background-image' : 'url(./images/icons/bullet_blue.png)',
});
} else {
$("#"+_input.attr('id')+".validator").css({
'background-image' : 'url(./images/icons/bullet_red.png)',
});
}
您真的不在乎是否有前导空格或尾随空格,也不在乎名称之间有多少空格,所有这些东西都很容易管理,而不会打扰用户。
因此,一个合适的函数可能是:
function checkNames(s) {
// Remove excess spaces
s.replace(/(^'s*)|('s*$)/g, '').replace(/'s+/g, ' ');
// Check remaining content
return /[a-z]+ [a-z]+/i.test(s);
}
但请注意,名字可以连字符,并包含数字(例如William Gates the 3rd)或英文字母表以外的字母。所以,通常你让用户键入他们想要的任何内容,只需处理空格。
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 如何检查管道中未定义的项目
- 主干-不管怎样,检查事件以前是否绑定过
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 递归使用 eval() 是检查程序执行的好方法吗?
- JavaScript名称空间和对象创建
- 检查onsubmit doenst work jquery contactform上的函数
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 在javascript中使用命名空间
- API密钥使用和检查示例
- 如何让程序检查所选单词中是否有按键
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- Javascript正则表达式空间检查
- 检查全局命名空间中是否存在没有备用名称的变量
- 如何禁用谷歌关闭短绒的额外空间检查
- 更好的检查JavaScript命名空间的方式
- 检查哪一边在鼠标指针周围有更多的空间
- 使用Phonegap,我如何检查剩余的可用磁盘空间
- 检查javascript中的一堆空白以防止发送空白数据,并修剪中间空间