用户名的jQuery Regex不起作用

时间:2013-02-12 04:43:55

标签: jquery regex username

我使用以下代码来测试用户是否在输入字段中正确编写了用户名(id ='username')。不幸的是,当使用其他特殊字符时,代码无法报告错误,即使用^,*,+,§等。

例如:

  

米奇^

     

ppppppp§°

     

micky12-22

他们都通过了测试。

不幸的是我花了好几天但是我没能解决问题。

用户名的语法是:

  1. 第一个字符=字母
  2. 以下字符=字母或数字OR _(下划线)。 (点) - (破折号)
  3. 最小长度为5个字符
  4. 最大长度为20个字符
  5. 这是代码:

    > var returncode = true; 
    > var userinput = $('#username').val(); 
    > var pattern = new RegExp(/^[a-zA-Z]{1}|[a-zA-Z0-9_\.\-]{4, 19}$/); 
    
    > if(!pattern.test(userinput)) {    
    >      returncode = false;
    > }
    

    非常感谢任何帮助。

    谢谢

3 个答案:

答案 0 :(得分:2)

new RegExp(/^[a-zA-Z]{1}|[a-zA-Z0-9_\.\-]{4, 19}$/)

正则表达式文字已经是正则表达式;你不需要再次施放它。 {1}是多余的。 a-zA-Z0-9_也是\w.在字符类中没有特殊含义,最后-不需要转义。无论如何,第一个[a-zA-Z]只能是[a-z] i标志,属于哪种类型。因此,除此之外:

/^[a-z]|[\w.-]{4,19}$/i

关于实际问题。 ^$都是“或”中的选项,因此任何以一个字母或4到19个字母,数字,下划线,句点或短划线开头的用户名都可以使用。分组中间:

/^([a-z]|[\w.-]{4,19})$/i

...除了,根据你的描述,你甚至不是故意这样做的?它可能只是:

/^[a-z][\w.-]{4,19}$/i

答案 1 :(得分:0)

尝试:

console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('test'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('1testing'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('testing'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('micky^'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('ppppppp§°'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('micky12-22'));

http://jsfiddle.net/z5x6k/1/

答案 2 :(得分:0)

试试这个:

 var returncode = true; 
 var userinput = $('#username').val(); 
 var pattern = new RegExp(/^[a-z][a-z0-9_.-]{4,19}$/); 

 if(!pattern.test(userinput)) {    
      returncode = false;
 }

,其中

^[a-z][a-z0-9_.-]{4,19}$
   |        |________________Letters, numbers, dot and dash in remaining 
   |
Letter as start

它肯定会起作用。