javascript - 用户名正则表达式验证问题

标签 javascript regex

我在发帖之前进行了搜索,但找不到适合我的答案。

下面是一个用于测试用户名的简单 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/

相关文章:

regex - Telegram Bot API 4.5 MarkdownV2 上的转义字符给超链接带来麻烦

javascript - 正则表达式替换问题

objective-c - IOS5 中的 RegexKitLite

objective-c - 您如何检测 UILabel 在 Cocoa Touch 中包含从右到左的语言?

javascript - 如何在 typescript 中声明私有(private)类成员的参数和返回类型?

javascript - IoT/WinJS/VS - 无法创建 Web 诊断对象

javascript - Rails - 将具有多个属性的对象传递给 javascript

Javascript 正则表达式需要 1 到 999999 之间的整数?

javascript - SlickGrid:如何查看列标题中的全文?

java - facebook graph api 调用使用 servlet 发布图像