通过jquery验证表单时,确保字段至少包含一个字母

时间:2010-08-10 20:01:58

标签: jquery regex jquery-validate

所以,我非常糟糕地使用正则表达式和javascript。因此,当我意识到我需要通过jquery验证表单字段以确保至少使用一个字母字符时,我决定向你们寻求帮助。

我想允许用户在此字段中使用撇号,空格,短划线,句点,下划线和字母数字字符。但是,它们必须使用至少一个字母字符。

这是我创建的验证器方法,它可以完成所有操作,但确保至少使用一个alpha字符。

 $.validator.addMethod("nameRegex", function(value, element) {
        return this.optional(element) || /[^a-z/g]+/gi.test(value) || !/[^\.\'\:\-_ a-z0-9]+/gi.test(value);
    }, "Name must contain at least one letter.");

任何提示/提示/见解/侮辱?谢谢大家!

1 个答案:

答案 0 :(得分:1)

我很幸运地提前查看了所需的字母,然后仅匹配有效字符的最小长度。在我的示例中,我使用最小长度为8个字符的有效字符为撇号,空格,连字符,句点,下划线和字母数字字符。我相信'\ w'字符类可以匹配下划线和字母数字。它似乎适用于我的测试:

var r = new RegExp("^(?=([` -.]|\\w)*?[a-zA-Z])([` -.]|\\w){8,}$")
> r.test('12345678') //all numbers shouldn't work
false
> r.test('12345678a') //long enough and one letter should work
true
> r.test('12345`_bc') //allow ` _
true
> r.test('a12345`_') //shouldn't matter if letter is in front
true
> r.test('123a45`_') //shouldn't matter if letter is in middle
true
> r.test('12345`_29') //even if special characters no letter should not work
false

编辑:我添加了'?'在前瞻'*'之后使量词非贪婪。另外我应该注意到我在Chrome中对此进行了测试,显然我的测试用例并不确定。我希望这会有所帮助。另一种方法是匹配零到多个有效字符,至少1个字母,然后从零到多个有效字符。类似的东西:

var r = new RegExp("^([` -.]|\\w)*[a-zA-Z]+([` -.]|\\w)*$")