相对文件路径最大大小和最大文件夹名称大小的正则表达式

Regex for relative filepath maximum size and maximum Folder name size

对于大多数文件系统,

Linux 的最大文件名长度为 255 个字符,最大路径为 4096 个字符。如果文件夹名称超过 255,则无法创建。

/^[a-z0-9\s_@-/.]+$/i 是一个很好的正则表达式(我也需要路径中的特殊字符),但我需要修改它,以便它限制字符串长度为 4095,文件夹名称长度为 255。

所以限制它是没有问题的 /^[a-z0-9\s_@-/.]{1-4095}$/i ,但这仍然没有解决最大文件夹名称大小问题。

应验证的示例:
/whatever/thisisnotapornstash/StillNot255CharactersButTheNextFolderIs/BPLrmwQRjm‌​twIGEMDcgGk1BCRY6ZkKzsHoWqJNzGxCzlGTSZkfOei0QD2S3bGfqSMJMPxuvgHhUJotNgh3hGDYD01n5‌​6JiZy32JygaHHDLQbGWtkbFJy5BrMP5s6eL6V8Kcft71CxHZUMEEJ2LbYExYtPxaWuQ9USUCxbt7wTIjA‌​LoLN6aHW0GovD5euXWsYuOsqvyGuzJqjaohM9FFNmMz7ul0R4HxzTWWQqCZ8hp6O2yipRTs5k4RmGCTLf‌​nY/

到目前为止我想到的是: data-ng-maxlength="4095" (这解决了文件路径最大长度) data-ng-pattern=/^[a-z0-9\s_@/.-](这是我应该将两个斜线之间的最大字符数限制为 255 的地方。)

这里是我测试的地方:https://regex101.com/r/kV7dL2/3

您需要使用逗号分隔限制量词中的最小值和最大值(否则,{1-4095} 字面匹配字符序列 {1-4095}):

/^[a-z0-9\s_@/.-]{1,4095}$/i

此外,连字符必须位于末尾,以避免转义并匹配文字连字符。

怎么样:

/^(?=(?:\/[a-z0-9s_@.-]{1,255})+).{1,4095}$/i

先行将目录的长度限制为 255 个字符,然后我们测试总长度限制为 4095 个字符。

您可以使用更通用的正则表达式,例如:

/^(?=(?:\/[^/]{1,255})+).{1,4095}$/i
/^\/?(([0-9a-z]{0,255})||([0-9a-z]{1,255})?([0-9a-z]{1,255}\/)+)[0-9a-z]{1,255}\/?$/i

此正则表达式将测试路径中所有文件夹名称的长度是否都在 1 到 255 个字符之间。路径 beginning/ending 中的正斜杠是可选的。