正则表达式不允许使用超出和下划线之外的符号

时间:2015-07-12 19:47:09

标签: javascript regex

我已经尝试了很多年现在使用JavaScript来获得一个正则表达式,但是不允许使用连字符和连字符,但它只是不起作用,这是我尝试过的:

function checkUsername(username)
    {
        username_lbl = document.getElementById('<%= username_lbl.ClientID %>');
        register_btn = document.getElementById('<%= register_btn.ClientID %>');
        if (username.match("?[!@#$%^&*()+=[{]};:<>|./?.]"))
        {
            username_lbl.innerHTML = 'Cannot contain symbols';
            register_btn.disabled = true;
            username_lbl.style.color = "red";
        }
    }

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

因为许多符号(例如?,[,])被用作正则表达式符号。你需要逃避它们,或者这样做:

username.match("[^\\w-_]");

[^]表示与字符集不匹配。

\ w表示单词字符[a-zA-Z0-9]

EdBallot编辑:修正了错字正则表达式([^\\w-_],已更改为[^\w\-_]

作者编辑:它应该是"[^\\w-_]",因为它是双引号并且应该被转义,或者您可以单引号或使其成为正则表达式

username.match(/[^\w-_]/)

答案 1 :(得分:0)

只需使用

var username = "_Fred-Fred_"; 
if (/[^-_a-zA-Z]/.test(username)) {
  alert("Wrong username: " + username);
}
username = "!_Fred-Fred_"; 
if (/[^-_a-zA-Z]/.test(username)) {
  alert("Wrong username: " + username);
}

[^-_a-zA-Z]匹配除字母,连字符或下划线之外的任何内容。如果发现其他内容,则测试失败。