我在发帖之前进行了搜索,但找不到适合我的答案。
下面是一个用于测试用户名的简单 JS 脚本。
用户名长度验证工作正常,但字符验证不行:
所有不允许的字符(例如 $%;[+))都会通过,但它们应该返回错误。
<script type="text/javascript">
$(document).ready(function() {
$("#username").change(function() {
var username = $("#username").val();
var msgbox = $("#status");
var usernameRegex = /^[a-zA-Z0-9][a-zA-Z0-9\._-]$i/
if ((username.length >= 4 && username.length <= 20) &&
(usernameRegex.test(username.value) == false)) {
$.ajax({
type: "POST",
url: "username.php",
data: "username=" + username,
success: function(msg) {
if (msg == 'OK') {
msgbox.html('<img src="ok.png">');
} else {
msgbox.html(msg);
}
}
});
} else {
$("#status").html('<img src="no.png">Try again');
}
});
});
</script>
我错过了什么?
最佳答案
您的正则表达式有问题,而且不仅仅是$i/
。你有:
var usernameRegex = /^[a-zA-Z0-9][a-zA-Z0-9\._-]$i/;
第二个 token [a-zA-Z0-9\._-]
仅计算一次。它检查第一个标记的第一个字符,然后检查第二个标记的第二个字符,然后由于 $
预计字符串结尾。即使将测试条件更改为 true
并修复其余逻辑,您的原始正则表达式仍将使所有超过两个字符的用户名失败。
试试这个:
var usernameRegex = /^[a-zA-Z0-9][a-zA-Z0-9\._-]+$/i;
+
确保正则表达式将在标记中查找至少一个字符,并匹配它们直到字符串结束。
最后,正如其他人提到的,您需要 usernameRegex.test(username)
而不是 usernameRegex.test(username.value)
,并且它需要测试true
值,而不是 false
。
See a working demo here.
关于javascript - 用户名正则表达式验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18904286/