Regular Expression: Allow letters, numbers, and spaces (with at least one letter or number)
我目前正在使用此正则表达式^[A-Z0-9 _]*$接受字母,数字,空格和下划线。 我需要修改它以在字符串中的某处至少需要一个数字或字母。 任何帮助,将不胜感激!
这将用于验证我的网站的用户名。 实际上,我实际上想支持尽可能多的字符,但只想确保避免代码注入,并且所有用户都能正常使用字符。 因此,我绝对愿意接受支持更多字符集的正则表达式验证建议。
-
由于某种原因,它会删除下划线,但是您明白了。
-
@makeee将正则表达式标记为代码(用`字符括起来),就可以了。
-
或执行我的操作,用""转义下划线。
-
@ Pax / Makeee:你们其中一位可以重命名吗,这样它说"至少一个字母"
您只需要指定当前的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 _]*$ |
-
在类似" ___ ___ ___"的字符串上,没有任何必需的数字或字母,您尝试过的正则表达式将尝试许多无法使用的组合。我认为它将尝试n种组合。 Daniel Ls的答案效果更好。
-
那将是一个非常简单的RE引擎@token。我见过的大多数代码都有优化功能,可以首先查找特定的值,例如^,$和[A-Z0-9]。满足所有其他条件之后,才需要进行回溯搜索。不满足意味着没有匹配。
-
不适用于AA,99,_999_888等字符串。
-
好的,在PHP中可以正常工作,但是在JS中,所有操作都无法通过正则表达式。我的JS这里有错误吗? if(!name.match(/ ^ [A-Z0-9 _] * [A-Z0-9] [A-Z0-9 _] * $ /)){//做某事}
-
此外,它很容易提出测试字符串,从而提供RE最坏情况的性能。如果速度是问题所在,那么您根本就不会使用RE-您可以使用简单的字符扫描仪。
-
有关可用于JS的测试器,请参见Regular-expressions.info/javascriptexample.html。
-
抱歉,我误读了要求同时输入字母和数字的问题,我错了。
-
[A-Z0-9] * [A-Z0-9] [A-Z0-9] *在JS中似乎不起作用(在上面链接的regex测试器中尝试过)。" makeee"通过[A-Z0-9]很好,但是没有完整的正则表达式模式。有任何想法吗?
-
1)您刚刚发布的RE中没有空格或下划线(或^ / $)。您使用的精确模式和搜索字符串是什么?
-
^ [A-Z0-9 _] * [A-Z0-9 _ [A-Z0-9 _] * $的正则表达式和AA的Subject字符串可以正常工作。 makeee作为主题字符串失败,因为它的小写字母。如果要小写,请参阅更新。
-
抱歉," makeee"同时失败^ [A-Z0-9 _] * [A-Z0-9] [A-Z0-9 _] * $和^ [A-Z0-9] * [A-Z0-9 ] [A-Z0-9] * $(如果删除了(^ / $,也会失败)。
-
另外,如果您只是想查找是否存在匹配项(而不是获取匹配项),请使用[if(name.search(/ ^ [A-Z0-9 _] * [A-Z0-9] [A -Z0-9 _] * $ /)> = 0){//找到一个}]。
-
这是另一个用于测试和使用RegExps的网站regexr.com。
要继续前进并指出要点,而不是重复使用这些指令:
1 2
| [A-Za-z0-9 _]
[A-Za-z0-9] |
我有两个(希望更好)的替代品:
第一个匹配任何单词字符(字母数字和_,以及Unicode)和空格。第二个匹配所有非单词字符或下划线的内容(仅字母数字,以及Unicode)。
如果您不希望Unicode匹配,请坚持使用其他答案。但是,这些看起来更容易(我认为)。在撰写本文时,采用"首选"答案并使用较短的正则表达式可以使我们:
也许更具可读性,也许更少。当然更短。你的选择。
编辑:
作为说明,我在这里假设使用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为好建议。我更新了答案以显示您的方式。
-
谢谢! unicode覆盖哪些字符范围?我希望能够支持诸如";#224;"之类的字符。
-
Unicode基本上涵盖了所有内容,尽管您可能需要做更多的工作才能使网页和程序与Unicode一起使用。
-
w是否与Unicode(我假设您指的是非ASCII)字符匹配,从一个正则表达式样式到另一个正则表达式样式都不同。如果要匹配整个Unicode范围内的字符,则应明确匹配。
-
@Alan-好的。我认为就Perl而言,这几乎是事实上的标准,可以用来衡量其他正则表达式引擎,并且我倾向于期望特定于PCRE的正则表达式行为能够像在Perl中一样工作。
-
不幸的是,正则表达式的味道到处都是。查看此表; #39;几乎恰好一半(PHP和JS都错了一半)。 Regular-expressions.info/charclass.html
-
哇,Perl不使用PCRE。#39; #39;很奇怪。嗯,嗯,PCRE必须尽快实现Unicode。到现在为止几乎是不可能的。
-
PCRE是一个C语言库,与许多其他口味一样,它使用Perl;#39; regex口味作为其模型-换句话说,Perl排名第一。如果在编译时选择了该选项,则PCRE支持Unicode,但是 w, d等仍仅匹配ASCII字符。
1
| ^[ _]*[A-Z0-9][A-Z0-9 _]*$ |
您可以选择在前面有一些空格或下划线,然后需要一个字母或数字,然后需要任意数量的数字,字母,空格或下划线。
仅包含空格和下划线的内容将导致[A-Z0-9]部分失败。
-
不适用于字符串A,9,AA,AA,99,_999_888,AAA_SS S
-
我不相信您已经尝试过了,雷诺,否则您会知道这是错误的。
-
我有,您只需要查看正则表达式(无论如何还是当前的)即可看到它会匹配像A这样的简单字符串
-
那与A很好,Renaud。 *匹配0或更大,这意味着A将转到[A-Z0-9]部分,而其他两个将仅为0。
-
为何丹尼尔斯(或我的)完全不匹配它?您是否不知道RE中的" *"是什么意思?
-
抱歉,我误读了要求同时输入字母和数字的问题,我错了。
您可以使用环顾:
1
| ^(?=.*[A-Za-z0-9])[A-Za-z0-9 _]*$ |
它将预先检查字符串中是否包含字母或数字,如果包含,则将检查其余字符是否符合您的要求。这可能可以改进,但是似乎可以用于我的测试。
更新:
添加Chris Lutz建议的修改:
-
您不应该使用 s。他说他想要空格,但没有提及标签。但是,尽管这样做了,为什么不使用[^ W_]而不是[A-Za-z0-9]?
-
谢谢。我用更明确的内容替换了正则表达式的部分。感谢您抓住这一点。
-
不适用于字符串A,9,AA,AA,99,_999_888,AAA_SS S
-
Renaud,它在perl中使用。你在用什么检查? perl -le(" A" =?/(?=^.*[A-Za-z0-9])[A-Za-z0-9 _] * $ /)吗?打印"匹配":打印"不匹配"
-
抱歉,我误读了要求同时输入字母和数字的问题,我错了。
-
我会将^锚放置在前瞻之前。它不会改变含义,但可以更清楚地传达您的意图。
-
我同意艾伦。当我玩弄它的时候,船锚就停在那里了,我再也没有放回去。我将锚点移到了前面。
-
最好在字符串的开头使用前瞻。顺便说一句,为什么不在结尾使用[\w ]*+$? #39;在那里,正则表达式引擎没有回溯的意义。
对我来说,@" ^ [ 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]\*$/) |