我正在编写一个带有预期文件名并对其进行验证的函数,以确保文件名中没有系统禁止的字符。这些是不允许的字符:/ \ | *? “<>
我显然可以使用string.indexOf()逐个搜索每个特殊字符,但这比使用正则表达式查找任何字符的string.search()要长很多在文件名中。
问题是大多数这些字符被认为是描述正则表达式的一部分,所以我不确定如何将这些字符包含在实际上是正则表达式本身的一部分中。例如,Javascript正则表达式中的/字符告诉Javascript它是正则表达式的开头或结尾。如何写一个功能上如此行为的JS正则表达式:filename.search(\ OR / OR | OR * OR?OR“OR< OR>)
答案 0 :(得分:1)
在特殊字符[\^$.|?*+(){}
之前添加反斜杠,例如\$
您还可以按指定的ASCII / ANSI值搜索字符。使用\xFF
,其中FF是2个十六进制数字。这是一个十六进制表引用。 http://www.asciitable.com/这是一个正则表达式引用http://www.regular-expressions.info/reference.html
答案 1 :(得分:1)
将你的东西放在character class中,如下所示:
[/\\|*?"<>]
你将不得不逃避反斜杠,但其他角色失去了他们的特殊含义。此外,在这种情况下,RegExp的test()
方法比String.search
更合适。
filenameIsInvalid = /[/\\|*?"<>]/.test(filename);
答案 2 :(得分:0)
你需要逃避特殊字符。在javascript中,这是通过使用\
(反斜杠)字符完成的。
我建议使用类似xregexp之类的内容,如果您希望匹配字符串文字(javascript的本地正则表达式支持中缺少的内容),它将为您处理转义。
答案 3 :(得分:0)
正则表达式的正确语法是:
/^[^\/\\|\*\?"<>]+$/
[^
会匹配任何内容,但[^]
组中匹配的任何内容都会将匹配项返回为null
。因此,检查验证是否与null
匹配。
演示:jsFiddle。
演示#2:Comparing against null。
第一个字符串有效;第二个是无效的,因此null
。
但显然,您需要转义匹配中使用的正则表达式字符。要转义用于正则表达式的字符,需要在字符前加一个反斜杠,例如\*
,\/
,\$
,\?
。