我已经搜索了之前关于Reg Exp的问题,但没有找到我需要的帮助。我是正则表达式的初学者,需要一个Javascript reg exp,将有效的文件名限制为以下内容:
A-Za-z0-9_-.
(字母数字,下划线,连字符,点)..
我感谢您对此提供任何帮助。此外,欢迎任何关于正确文件名的想法。我相信上述要求会为我服务,但我总能听到更多关于这个问题的想法。我正在创建一个基于Web的应用程序,人们可以上传文档。我更喜欢创建通用文件名限制而不关心操作系统类型。谢谢!
答案 0 :(得分:0)
^(?!.*\..*\.)\w[\w.-]{0,253}[\w-]$|^\w$
说明:
^
- 从字符串的开头(?!.*\..*\.)
- negative lookahead以确保没有两个点\w
- 相当于一个A-Za-z0-9_
字符[\w.-]{0,253}
- 所列出的所有可能字符中的253个[\w-]
- 所有可能的字符,但点$
- 字符串的结尾|^\w$
- 所有或A-Za-z0-9_
个字符答案 1 :(得分:0)
这个正则表达式非常接近。唯一的问题是它与两个或多个连续的点不匹配。
var fileRegex = /^[\w][\w-\.]{0,253}[\w-]$/
击穿
/^[\w]
- 它只能以单词字符开头,不能以点或连字符开头
[\w-\.]
- 可以包含单词字符,连字符或点
{0,253}
- 匹配前一个表达式的0到253之间的
[\w-]$
- 只能以单词字符或连字符结尾。
这是匹配连续点的正则表达式
var dotRegex = /(\.)\1+/
OR
var dotRegex = /\.{2,}/
要查看字符串是否与正则表达式匹配,我们可以使用test
方法。我们希望第一个正则表达式通过,第二个正则表达式失败。
fileRegex.test(string) && !dotRegex.test(string)
答案 2 :(得分:0)
仅允许A-Za-z0-9_-。 (字母数字,下划线,连字符,点)
可以用
处理result = /^[\w.-]+$/.test(input);
但是,文件名不能以连字符或点
开头
可以用
处理result = !/^[-.]/.test(input);
文件名不能以点结尾
可以用
处理result = !/\.$/.test(input);
文件名中只有一个点,没有
..
可以用
处理result = !/\.\./.test(input);
没有空格
第一点已经处理了
最大长度:255
可以用
处理result = input.length < 256;
你们一起得到了:
function validate(input) {
return /^[\w.-]+$/.test(input) &&
!/^[-.]/.test(input) &&
!/\.$/.test(input) &&
!/\.\./.test(input) &&
input.length < 256;
}
这很简单,易于阅读并且更容易调试。
答案 3 :(得分:0)
这是使用单个正则表达式执行此操作的方法:
^(?!.*\.\.)(?=\w)[\w.-]{0,254}[\w-]$