正则表达式: 允许字母、数字和空格(至少有一个字母或数字)

我目前正在使用这个正则表达式 ^[A-Z0-9 _]*$接受字母,数字,空格和下划线。我需要修改它,要求至少有一个数字或字母在字符串的某处。如果你能帮忙,我会很感激的!

这将是为我的网站验证用户名。我实际上想支持尽可能多的字符,但只是想确保我防止代码注入和字符将显示良好的所有用户。因此,我非常欢迎正则表达式验证建议,这将支持更广泛的字符集。

310970 次浏览
^[ _]*[A-Z0-9][A-Z0-9 _]*$

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

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

您只需指定您当前的 RE,后面跟一个字母/数字,再跟您当前的 RE:

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

既然您已经声明它们是 Javascript RE,那么有一个非常有用的站点 给你,您可以在其中根据输入数据测试 RE。

如果你还想要小写字母:

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

你可以使用 看看周围:

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

它将提前检查字符串是否有字母或数字,如果有,它将检查其余的字符是否满足您的要求。这可能会得到改进,但它似乎与我的测试工作。

更新:

Chris Lutz建议加入 改装:

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

继续前进,在那里得到一个点,而不是重复使用这些:

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

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

[\w ]
[^\W_]

第一个匹配任何单词字符(字母数字和 _,以及 Unicode)和空间。第二个匹配任何 不是非单词字符或下划线(仅限字母数字和 Unicode)。

如果您不希望 Unicode 匹配,那么坚持使用其他答案。但这些只是看起来更容易的眼睛(在我看来)。采用本文写作时的“首选”答案,并使用较短的正则表达式,我们可以得到:

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

也许更易读,也许更少,当然更短,你自己选。

编辑:

注意,我假设这里是 Perl 风格的正则表达式。正则表达式引擎可能支持也可能不支持像 w 和 W 这样的内容。

编辑2:

我用某人链接的 JS 正则表达式测试器和一些基本示例测试了我的正则表达式。没有做任何广泛的工作,只是想确保 w 和 W 在 JS 中工作得很好。

编辑3:

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

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

我不知道在 JavaScript 方面应该做些什么,但我肯定这并不难。

对我来说,@“ ^ [ w ] + $”是可行的,允许输入数字、字母和空格,但至少需要输入一个字母或数字。

这将针对特殊字符、前导空格和尾随空格进行验证:

var strString = "Your String";


strString.match(/^[A-Za-z0-9][A-Za-z0-9 ]\*[A-Za-z0-9]\*$/)
$("#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;
}
}
});

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

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

并在文本字段中调用为

<input type="text" class="form-control validate[required,custom[onlyLetterNumberSp]]"  id="title" name="title" placeholder="Title"/>