我使用以下代码来测试用户是否在输入字段中正确编写了用户名(id ='username')。不幸的是,当使用其他特殊字符时,代码无法报告错误,即使用^,*,+,§等。
例如:
他们都通过了测试。米奇^
ppppppp§°
micky12-22
不幸的是我花了好几天但是我没能解决问题。
用户名的语法是:
这是代码:
> 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;
> }
非常感谢任何帮助。
谢谢
答案 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'));
答案 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
它肯定会起作用。