Rails Carrierwave 上传的文件名之白名单正则表达式的疑惑

linjunzhugg · 2014年09月12日 · 最后由 linjunzhugg 回复于 2014年09月13日 · 2739 次阅读

在官网中有这么一段话:

CarrierWave 对上传文件名默认只提供英文字母,阿拉伯数字以及 “-+_." 作为白名单字符。如果要自定义,可以重写 sanitize_regexp,该函数的正则会匹配所有即将要过滤的字符

于是提供了以下这个正则:

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/

但是我对 ^[:word:] 这个正则很疑惑,无法理解。

在 (http://www.rubular.com/) 这个网站实验了下,发觉可以匹配到 单引号 和 空格 以及其他字符。

请问下这个正则应该如何理解?

[:word:] 可以理解为 “可用作词语的字符” [^[:word:]\.\-\+] 就是 非词语、加、减、点号以外的一切字符 被匹配到的字符会被替换为下划线

#2 楼 @aptx4869

可用作词语的字符?

能否麻烦您解释得再清楚一点呢?很疑惑,话说标准正则表达式好像没有这种写法。

#3 楼 @linjunzhugg 请看文档:http://www.ruby-doc.org/core-2.1.1/Regexp.html

这个写法是符合 IEEE 标准的 POSIX style 的,你说的标准正则应该是 PCRE

#4 楼 @saiga 原来如此,问题解决。谢谢~!!

[[:word:]] 是 匹配 Unicode 编码下的字符,字母,标记,标点符号,数字

[^[:word:]] 则是取否

需要 登录 后方可回复, 如果你还没有账号请 注册新账号