Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式:允许字母、数字和空格(至少包含一个字母或数字)_Javascript_Regex - Fatal编程技术网

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

Javascript 正则表达式:允许字母、数字和空格(至少包含一个字母或数字),javascript,regex,Javascript,Regex,我目前正在使用这个正则表达式来接受字母、数字、空格和下划线。我需要修改它,以要求字符串中至少有一个数字或字母。任何帮助都将不胜感激 这将是验证我的网站用户名。实际上,我希望支持尽可能多的字符,但我只是想确保防止代码注入,并确保所有用户都能很好地显示字符。因此,我完全接受正则表达式验证建议,这些建议将支持更广泛的字符集 ^[ _]*[A-Z0-9][A-Z0-9 _]*$ 您可以选择在前面有一些空格或下划线,然后需要一个字母或数字,然后是任意数量的数字、字母、空格或下划线 仅包含空格和下划线的内

我目前正在使用这个正则表达式来接受字母、数字、空格和下划线。我需要修改它,以要求字符串中至少有一个数字或字母。任何帮助都将不胜感激

这将是验证我的网站用户名。实际上,我希望支持尽可能多的字符,但我只是想确保防止代码注入,并确保所有用户都能很好地显示字符。因此,我完全接受正则表达式验证建议,这些建议将支持更广泛的字符集

^[ _]*[A-Z0-9][A-Z0-9 _]*$
您可以选择在前面有一些空格或下划线,然后需要一个字母或数字,然后是任意数量的数字、字母、空格或下划线


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

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

^[A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*$
既然您已经声明它们是Javascript REs,那么有一个有用的站点,您可以根据输入数据测试re

如果您还需要小写字母:

^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$
您可以使用:

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

更新:

添加建议者:


要继续并获得一个要点,而不是重复使用这些:

[A-Za-z0-9 _]
[A-Za-z0-9]
我有两个(希望更好)替代者:

[\w ]
[^\W_]
第一个匹配任何单词字符(字母数字和
\uuu
,以及Unicode)和空格。第二个匹配非单词字符或下划线(仅字母数字以及Unicode)的任何内容

如果您不想使用Unicode匹配,请坚持使用其他答案。但在我看来,这些看起来更容易看。在撰写本文时,采用“首选”答案并使用较短的正则表达式,我们可以得到:

^[\w ]*[^\W_][\w ]*$
也许更可读,也许更少。当然更短。你的选择

编辑:

请注意,我在这里假设Perl风格的正则表达式。您的正则表达式引擎可能支持或不支持\w和\w之类的内容

编辑2:

用有人链接的JS正则表达式测试仪测试了我的测试,一些基本的例子效果很好。没有做任何广泛的工作,只是想确保\w和\w在JS中工作良好

编辑3:

在尝试使用jsregex测试站点测试一些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]\*$/)

只需将其添加到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"/>



我出于某种原因去掉了下划线,但你明白了。@makeee将正则表达式标记为代码(用`字符包围),你会没事的。或者像我做的那样,用“\”@Pax/makeee:你能不能给它重新命名,让它在“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”这样的刺上写上“至少一个字母”,一个不包含所需数字或字母的正则表达式,您尝试的正则表达式将尝试许多无法工作的组合。我想它会尝试n种组合。Daniel L的答案更有效。那将是一个相当简单的引擎,@token。我看到的大多数优化都是先寻找特定值,比如^$和[A-Z0-9]。只有在满足所有其他条件后,才需要回溯搜索。不满意意味着不匹配。好的,在PHP中工作良好,但在JS中,一切都不符合正则表达式。我的JS中有错误吗?此外,如果(!name.match(/^[A-Z0-9_]*[A-Z0-9][A-Z0-9_]*$/){//do something},则很容易生成一个测试字符串,以提供最坏情况下的性能。如果速度是个问题,你根本就不会使用REs,你应该使用一个简单的字符扫描器,^[a-Z0-9\]*[a-Z0-9][a-Z0-9\]*$的Regexp和AA的主题字符串可以正常工作。makeee作为主题字符串失败,因为它是小写的。如果要小写,请参阅更新。不应使用\s。他说他想要空间,但没有提到标签。但是,既然我们这样做了,为什么不使用[^\W_u]而不是[A-Za-z0-9]?谢谢。我用更明确的内容替换了正则表达式的部分。感谢您捕捉到这一点。它不适用于像“A”、“9”、“AA”、“AA”、“99”、“999”、“888”、“AAA”和“S”这样的字符串,它在perl中起作用。你在用什么检查这个?perl-le'(“A”=/(?=^..[A-Za-z0-9])[A-Za-z0-9(]*$/)?打印“匹配”:打印“不匹配”我会将“^锚定”放在前瞻之前。它不会改变意思,但会更清楚地传达你的意图。不适用于像“A”、“9”、“AA”、“AA”、“99”、“999”、“AAA”这样的字符串。我相信你没有试过,雷诺,否则你会知道它是错误的。我试过了,你只需要看看正则表达式(反正是当前的)要查看它是否匹配与“a”匹配的简单字符串(如“a”),Renaud。*匹配0或更多,这意味着“A”将进入[A-Z0-9]部分,而其他两个将仅为0。抱歉,我误读了这个问题,它需要字母和数字,我错了。好的建议+1。我更新了我的答案以显示你的方式。谢谢!unicode包含哪些字符范围?我希望能够支持字符,例如“a”。Unicode基本上涵盖了所有内容,尽管您可能需要做更多的工作才能使网页和程序使用Unicode。是否\w
$("#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;
        }
    }
});
    "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"/>