复杂的Javascript Reg Exp

时间:2015-12-07 20:37:09

标签: javascript regex

我已经搜索了之前关于Reg Exp的问题,但没有找到我需要的帮助。我是正则表达式的初学者,需要一个Javascript reg exp,将有效的文件名限制为以下内容:

  • 仅允许A-Za-z0-9_-.字母数字下划线连字符
  • 然而,使用连字符
  • filename 无法启动 使用
  • 文件名 无法结束
  • filename 中只有 ,没有..
  • 空间 s
  • 最大长度: 255

我感谢您对此提供任何帮助。此外,欢迎任何关于正确文件名的想法。我相信上述要求会为我服务,但我总能听到更多关于这个问题的想法。我正在创建一个基于Web的应用程序,人们可以上传文档。我更喜欢创建通用文件名限制而不关心操作系统类型。谢谢!

4 个答案:

答案 0 :(得分:0)

^(?!.*\..*\.)\w[\w.-]{0,253}[\w-]$|^\w$

See it in action

说明:

  • ^ - 从字符串的开头
  • 开始
  • (?!.*\..*\.) - 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-]$