1

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

例如:

米奇^

ppppppp§°

米奇12-22

他们都通过了测试。

不幸的是,我花了几天时间,但未能解决问题。

用户名的语法是:

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

这是代码:

> 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;
> }

任何帮助深表感谢。

谢谢

4

3 回答 3

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
于 2013-02-12T04:48:01.843 回答
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/

于 2013-02-12T04:48:01.137 回答
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

它肯定会起作用。

于 2013-02-12T04:50:47.293 回答