我有一个正则表达式,仅验证要上传.doc
,.docx
,.DOCX
,.rtf
和.pdf
的文件。请参阅下面的正则表达式代码:
"^.+(.doc|.DOC|.docx|.DOCX|.rtf|.RTF|.pdf|.PDF)$"
但在这种情况下,我还想验证文件名不应包含多个.
。
例如:
文件名不应该是这样的:abc.abc.doc
它应该是这样的:abc.doc
。
答案 0 :(得分:4)
您想要做的事情有两个通用公式。
第一种方法:说出你想要的东西
(?i)^[a-z0-9_-]+\.(?:docx?|rtf|pdf)$
(?i)
使其不区分大小写,因此您不必重复doc
,DOC
等。例如,您可以拥有doC
或DoC
扩展名,但原始更改中未提及。
前缀的允许字符在[a-z0-9_-]
中指定,因此如果您想要更多字符,可以在那里添加字符。
第二种方法:说出你不想要的东西
另一种方法是允许前缀中的所有字符,除了一个点,也许还有一些"坏字符":
(?i)^[^.<>:"/\\|*?\t\r\n]+\.(?:docx?|rtf|pdf)$
除非您确切知道文件系统允许的字符集,否则它们都不是完美契合。
答案 1 :(得分:0)
^[^.]+([.]doc|[.]DOC|[.]docx|[.]DOCX|[.]rtf|[.]RTF|[.]pdf|[.]PDF)$
[^.]+
匹配一个或多个不是句点的字符。