关于javascript:正则表达式:允许字母,数字和空格(至少一个字母或数字)

Regular Expression: Allow letters, numbers, and spaces (with at least one letter or number)

我目前正在使用此正则表达式^[A-Z0-9 _]*$接受字母,数字,空格和下划线。 我需要修改它以在字符串中的某处至少需要一个数字或字母。 任何帮助,将不胜感激!

这将用于验证我的网站的用户名。 实际上,我实际上想支持尽可能多的字符,但只想确保避免代码注入,并且所有用户都能正常使用字符。 因此,我绝对愿意接受支持更多字符集的正则表达式验证建议。


您只需要指定当前的RE,然后再输入字母/数字,然后再输入当前的RE:

1
^[A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*$

由于您现在已经说过它们是Javascript RE,因此这里有一个有用的站点,您可以在其中针对输入数据测试RE。

如果还需要小写字母:

1
^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$


要继续前进并指出要点,而不是重复使用这些指令:

1
2
[A-Za-z0-9 _]
[A-Za-z0-9]

我有两个(希望更好)的替代品:

1
2
[\w ]
[^\W_]

第一个匹配任何单词字符(字母数字和_,以及Unicode)和空格。第二个匹配所有非单词字符或下划线的内容(仅字母数字,以及Unicode)。

如果您不希望Unicode匹配,请坚持使用其他答案。但是,这些看起来更容易(我认为)。在撰写本文时,采用"首选"答案并使用较短的正则表达式可以使我们:

1
^[\w ]*[^\W_][\w ]*$

也许更具可读性,也许更少。当然更短。你的选择。

编辑:

作为说明,我在这里假设使用Perl风格的正则表达式。您的正则表达式引擎可能支持或可能不支持 w和 W。

编辑2:

使用与某人链接的JS正则表达式测试器对我的代码进行了测试,并提供了一些基本示例。没有做任何广泛的事情,只是想确保 w和 W在JS中能正常工作。

编辑3:

尝试使用JS regex测试器站点测试某些Unicode之后,我发现了问题:该页面使用ISO而不是Unicode。难怪我的日语输入不匹配。哦,那不难解决:

1
;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8";gt;

或者。我不知道JavaScript应该做什么,但是我相信这并不难。


1
^[ _]*[A-Z0-9][A-Z0-9 _]*$

您可以选择在前面有一些空格或下划线,然后需要一个字母或数字,然后需要任意数量的数字,字母,空格或下划线。

仅包含空格和下划线的内容将导致[A-Z0-9]部分失败。


您可以使用环顾:

1
^(?=.*[A-Za-z0-9])[A-Za-z0-9 _]*$

它将预先检查字符串中是否包含字母或数字,如果包含,则将检查其余字符是否符合您的要求。这可能可以改进,但是似乎可以用于我的测试。

更新:

添加Chris Lutz建议的修改:

1
^(?=.*[^\W_])[\w ]*$/


对我来说,@" ^ [ w] + $"有效,允许使用数字,字母和空格,但需要至少键入一个字母或数字。


您只需将其添加到jquery.validationEngine-en.js文件中

1
2
3
4
   "onlyLetterNumberSp": {
               "regex": ^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$,
               "alertText":"* No special characters allowed"
          },

并在文本字段中将其称为

1
;lt;input type="text" class="form-control validate[required,custom[onlyLetterNumberSp]]"  id="title" name="title" placeholder="Title"/;gt;


1
2
3
4
5
6
7
8
9
10
$("#ValuationName").bind("keypress", function (event) {
    if (event.charCode!=0) {
        var regex = new RegExp("^[a-zA-Z ]+$");
        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    }
});

这将针对特殊字符以及前后空格进行验证:

1
2
3
var strString ="Your String";

strString.match(/^[A-Za-z0-9][A-Za-z0-9 ]\*[A-Za-z0-9]\*$/)