2014-11-21 86 views
1

我正在使用jquery验证插件来验证我的输入字段。RegEx for jQuery输入验证

我有应该接受一个字段:

一个)字母[A-ZA-Z]

b)中的字母与数字[A-ZA-Z0-9]

c)中无特殊字符

所以:

ADFad1334或43545SFDDFdf454fgf:是正确的,因为我们有字母和数字

asdadadASD:是正确的,因为我们只有字母

12312342:不正确的,因为它只有数字

sdff23424#$:不正确的,因为有特殊字符(在这个例子#和$)

我使用的代码是下面的一种:

$.validator.addMethod("atLeastAletter", function(value) { 
return  /^[a-zA-Z]*$/img.test(value) || /^[a-zA-Z0-9]*$/img.test(value); 

},"Must contain at least a letter and/or number(s). No other characters are allowed"); 

然后:

$('#RegistrationForm').validate({ 

    rules: { 
       fieldname: { 
           atLeastAletter: true 

          }, 

      ..... 

这个正则表达式的问题是,如果输入只是数字(例如, 3434224),它会接受它并通过验证。

什么问题?

在此先感谢。

回答

2

或这种模式

^(?=\S*[a-zA-Z])[a-zA-Z0-9]+$ 

Demo

^    # Start of string/line 
(?=    # Look-Ahead 
    \S   # <not a whitespace character> 
    *    # (zero or more)(greedy) 
    [a-zA-Z]  # Character Class [a-zA-Z] 
)    # End of Look-Ahead 
[a-zA-Z0-9]  # Character Class [a-zA-Z0-9] 
+    # (one or more)(greedy) 
$    # End of string/line 
+0

就像我希望它那样工作!干杯! – christostsang 2014-11-21 22:16:23

0

如果您想不想去与所有HTML5看看这个小提琴:http://jsfiddle.net/bud68oho/2/

这拨弄使用required和模式属性来验证表单。如果输入未填充,则必需的属性不允许发布表单。pattern属性允许您实现用于匹配的正则表达式。如果输入不符合正则表达式的要求,那么表单将不会发布。

这种方法唯一的问题是浏览器的兼容性。确保使用目标浏览器测试此方法。上面的例子适用于最新版本的IE和Chrome,我无法做任何进一步的测试。

0

/^[a-zA-Z0-9]*$/img.test("1")是真实的,所以只取两个正则表达式两种:

return /^[a-zA-Z]*$/img.test(value) || (/[a-zA-Z]/img.test(value) && /^[a-zA-Z0-9]*$/img.test(value)) 

或像这样:

return /^[a-zA-Z]*$/img.test(value) || (/^[a-zA-Z0-9]*$/img.test(value) && !/^[0-9]*$/img.test(value)) 

注意:如果你把我的正则表达式(IMG)后,你就必须把az或AZ,不区分大小写。其他注意事项:您允许使用这些正则表达式的空字符串“”。

0

我认为您可能需要对数字唯一的情况进行正面的字母数字检查和否定检查。

$.validator.addMethod("atLeastAletter", function(value) { 
    return  /^[a-zA-Z0-9]+$/img.test(value) && ! /^[0-9]+$/img.test(value) 

},"Must contain at least a letter and/or number(s). No other characters are allowed"); 
2
/^\w*[a-zA-Z]+\w*$/ 

这应该相匹配,只有字母和数字的字符串,但它必须至少包含一个字母。

sadAddsa // Pass 
98463298 // Fail 
jdsH98sd // Pass 
987Fkjd89 // Pass 
jfk!jhj // Fail 
[email protected] // Fail 
A8 // Pass 
8S // Pass 
B // Pass 
7 // Fail 
B_bkfd86jh // Fail (Using the regex in the edit) 

编辑:作为阿尔法布拉沃指出。这也会匹配下划线。如果你不想要下划线/^[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$/只会匹配字母和数字,只有它包含一个字母。

+0

FYI,这个模式将匹配'_'不知道,如果确定与OP! – 2014-11-21 22:10:41

+0

不,_不应该被允许.. – christostsang 2014-11-21 22:12:41

+0

啊,很好。我添加了一个不允许下划线的更新。 – AndrewTet 2014-11-21 22:13:53