Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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_Validation - Fatal编程技术网

Javascript 正则表达式验证规则

Javascript 正则表达式验证规则,javascript,regex,validation,Javascript,Regex,Validation,我正在写一个数据库备份函数,作为我学校项目的一部分 我需要编写一个正则表达式规则,以便数据库备份名称只能包含合法字符 “legal”是指不包含任何符号或空格的字符串。只有字母表和数字中的字母 有效字符串的示例为'2012年1月31日'或'63927jkdfjsdbjk623'或'hello123backup' 以下是迄今为止我的JS代码: // Check if the input box contains the charactes a-z, A-Z ,or 0-9 with a re

我正在写一个数据库备份函数,作为我学校项目的一部分

我需要编写一个正则表达式规则,以便数据库备份名称只能包含合法字符

“legal”是指不包含任何符号或空格的字符串。只有字母表和数字中的字母

有效字符串的示例为
'2012年1月31日'
'63927jkdfjsdbjk623'
'hello123backup'

以下是迄今为止我的JS代码:

    // Check if the input box contains the charactes a-z, A-Z ,or 0-9 with a regular expression.

    function checkIfContainsNumbersOrCharacters(elem, errorMessage){
        var regexRule = new RegExp("^[\w]+$");
        if(regexRule.test( $(elem).val() ) ){ 
            return true;
        }else{
            alert(errorMessage);
            return false;
        }
    }


//call the function

checkIfContainsNumbersOrCharacters("#backup-name", "Input can only contain the characters a-z or 0-9.");
不过,我以前从未真正使用过正则表达式,不过在谷歌搜索了一下之后,我找到了一个工具,从中我编写了以下正则表达式规则:

^[\w]+$
^=字符串的开头

[w]=a-z/a-z/0-9

“+”=字符串后面的字符


在运行我的函数时,我输入的字符串似乎返回false:(是我的代码错了吗?还是我没有正确地使用正则表达式规则?

这是官方规范:但它不太容易转换为正则表达式。只有正则表达式不会这样做,因为也有正则表达式


为什么不把它放在查询中(别忘了正确地转义它)让MySQL给你一个错误?例如,你正在使用的MySQL版本中可能有一个bug,即使你的检查是正确的,MySQL也可能会拒绝。当你将regex声明为RegExp构造函数的字符串参数时,你需要对它进行转义。两者都是

var regexRule = new RegExp("^[\\w]+$");
……还有

var regexRule = new RegExp(/^[\w]+$/);
会有用的


但是请记住,对数据库数据的客户端验证永远都不够,因为禁用浏览器中的javascript很容易绕过验证,无效/恶意数据可能会到达您的数据库。您需要在服务器端验证数据,但防止使用无效数据请求,但验证客户端是好的practice.

\w
是[[:alnum:]的同义词,它匹配alnum类的单个字符。请注意,使用字符类意味着您可以匹配不属于ASCII字符编码的字符,这可能是您想要的,也可能不是您想要的。如果您真正想要匹配的是
[0-9A-Za-z]
,那么这就是您应该使用的。

它可以更简单。这样可以:

function checkValid(name) {
  return /^\w+$/.test(name);
}

/^\w+$/
new RegExp()
的文字符号。由于
.test
函数返回一个布尔值,您只需要返回它的结果。这也比
new RegExp(“^\\w+$”)
读起来更好,而且您不太可能出错(感谢@x3ro指出需要在字符串中使用两个反斜杠).

这里的问题是,当在字符串中写入
\w
时,将
w
转义,得到的正则表达式如下所示:
^[w]+$
,包含作为文字字符的
w
。当使用传递给
RegExp
构造函数的字符串参数创建正则表达式时,需要转义反斜杠,如下所示:
new RegExp(“^[\\w]+$”
),这将创建所需的正则表达式


有一种方法可以避免这种情况,使用JavaScript提供的简写符号:
var regex=/^[\w]+$/;
,它不需要任何额外的转义。

我在我的JS控制台中尝试了
/^[\w]+$/.test(“ads123”)
,它可以正常工作,即返回
true
新的Regexp([Regexp转到这里],“[modifiers]”)
/[regexp在这里]/[modifiers]
是等效的。请注意前者使用引号,后者不使用引号。对
+
的更正确解释是“匹配前面的标记(即
\w
)1次或多次”。但从我所看到的来看,代码应该是有效的。你所有的回答都太好了,无法投票,所以我投票支持了你们所有人。非常感谢所有回答/评论这个问题的人,我学到了很多,问题现在解决了:)
\w
[\w]
在这种情况下是绝对等效的-不需要括号,但这对结果没有影响。那么,这是JavaScript的东西吗?在其他环境中,范围内的角色将失去其特殊性。或者将
[\w]
视为一个字符类,相当于
[:print:][/code>?
[\w]
在每种正则表达式方言中都是一样的,比如javascript、.NET、Python、Perl、Ruby、XPath等。除了
\w
根据方言是否支持unicode,它的含义不同。括号没有区别。我注意到\w不包含在re_格式(3)中,并且似乎不属于POSIX 1003.2正则表达式定义的一部分,尽管我从grep(1)手册页中看到\w是[[:alnum:]字符类的同义词。是的,你说得对。这两个例外是GNU和POSIX的基本正则表达式方言。两种语言的扩展方言都支持这一点。但是,BRE方言中也不支持“+”,而且会逐字匹配。谢谢,我编辑了答案。不过,您必须对字符串进行转义才能使其工作。如果您使用的是文本,则无需使用
new RegExp
/asdf/
很好。-1将未经验证/清理的内容放入MySQL查询中对我来说似乎不是一个好主意。确实如此,只要确保正确地转义即可。这很公平。收回我的
-1
,并添加一条提醒不要忘记正确逃跑的通知:)+1让我错过了这一点,即使我几小时前在另一篇帖子中解释了这一点。;-)-我感谢你说正则表达式很好,因为它有一个错误