我让用户可以通过文本区域更改文件名,但现在我遇到了正则表达式问题。
正如我在 Windows 7 中看到的那样,文件名仅允许使用这些字符:
\ / : * ? < > |
但我固执地,也许也是明智地选择将正则表达式最小化为仅这些特殊字符:
- _ .
所有其他的都应该被砍掉。
有人可以帮我解决这个正则表达式吗?
preg_replace 除了:
A-Za-z0-9
和- _ .
我还是真的不明白。
我让用户可以通过文本区域更改文件名,但现在我遇到了正则表达式问题。
正如我在 Windows 7 中看到的那样,文件名仅允许使用这些字符:
\ / : * ? < > |
但我固执地,也许也是明智地选择将正则表达式最小化为仅这些特殊字符:
- _ .
所有其他的都应该被砍掉。
有人可以帮我解决这个正则表达式吗?
preg_replace 除了:
A-Za-z0-9
和- _ .
我还是真的不明白。
preg_replace('/[^A-Za-z0-9 _ .-]/', '', $filename);
[] 是一个字符类,而 ^ 否定它。所以它实际上匹配除了该组中的字符之外的任何内容。
请注意,-
在末尾,因为如果在其他地方使用它是一个特殊的范围字符,例如 0-9
您的问题已经列出了相当多的字符集。您只需将其插入preg_replace()
即可启动。
试试这个:
$filename = preg_replace('/[^a-zA-Z0-9_.-]/', '', $filename);
字符集^
开头的 ,由 包围[]
,表示不匹配字符列表。因此,该行可以理解为“替换不是以下的字符”。