Javascript 正则表达式验证规则
我正在写一个数据库备份函数,作为我学校项目的一部分 我需要编写一个正则表达式规则,以便数据库备份名称只能包含合法字符 “legal”是指不包含任何符号或空格的字符串。只有字母表和数字中的字母 有效字符串的示例为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
'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让我错过了这一点,即使我几小时前在另一篇帖子中解释了这一点。;-)-我感谢你说正则表达式很好,因为它有一个错误