如何使用 RegEx 检查表单输入是不是以 .pdf 结尾

Posted

技术标签:

【中文标题】如何使用 RegEx 检查表单输入是不是以 .pdf 结尾【英文标题】:How to use RegEx to check if form input ends with .pdf如何使用 RegEx 检查表单输入是否以 .pdf 结尾 【发布时间】:2016-04-03 15:22:57 【问题描述】:

所以我的网络表单上有一个文本字段,用户将使用它来输入文件路径。我想检查输入的内容是否以 .pdf 结尾

我一直在环顾四周,看起来我需要使用 RegEx 来获得多个浏览器的支持,但我找不到一个很好的例子。

html 字段

<input type="text" name="filelocation" id="filelocation" placeholder="Must include .pdf file extension">

【问题讨论】:

@AvinashRaj 将匹配测试字符串中任何位置的“.pdf”。 @AvinashRaj 更像\.pdf$ @DJDavid98 更像 /.*\.pdf/ @JaredSmith “将匹配 '.pdf' 测试字符串中的任何位置。” ;) 【参考方案1】:

您可以使用模式属性来做到这一点:

<form action="#">
  <input type="text" pattern=".+\.pdf$" placeholder="Must include .pdf file extension">
  <input type="submit">
</form>

它还将确保在末尾的.pdf 之前有一些文本

【讨论】:

【参考方案2】:

Regex 可能是错误的工具。试试

var arr = path.split('.');
if (arr[arr.length - 1] === 'pdf') 
  //do your thing

这应该在任何浏览器中都可以正常工作。

如果您更喜欢正则表达式解决方案(这对于任何性能比较来说都不够复杂,所以它完全取决于您的口味)请参阅 CodeiSir 的回答。它使用 HTML 模式属性。

【讨论】:

你为什么不使用正则表达式? @CodeiSir 到目前为止提供的所有正则表达式(包括使用pattern 属性的出色答案中的正则表达式)将匹配测试字符串中的任何位置的“.pdf”*。当然,“.pdf”不太可能位于文件路径中的其他位置。 *好吧,从技术上讲,你的一开始不会匹配,但你知道我的意思。 /.*\.pdf$/接受字符串末尾的“.pdf”。正则表达式末尾的 $ 符号确保模式位于测试字符串的末尾。 '将匹配 .pdf 测试字符串中的任何位置'真的不同意这一点。检查我的答案,我什至将包含 .pdf 的示例输入测试用例放在中间 @JaredSmith 请注意在你的回答中(不要偷我的回答;))【参考方案3】:

你需要的表达式是/\.pdf$/

例子:

document.querySelector('#filelocation').addEventListener('blur', check);

function check(e) 
 alert(/\.pdf$/.test(e.target.value));
&lt;input type="text" name="filelocation" id="filelocation" placeholder="Must include .pdf file extension"&gt;

【讨论】:

【参考方案4】:

我同意 RegEx 可能不是解决此问题的最佳解决方案。因此,我推荐 Jared Smith 的回答。但是,如果您真的想为此使用 RegEx,请尝试以下模式:

var PdfPattern = /*\.pdf$/i;

此模式将匹配任何以“.pdf”结尾且不区分大小写的字符串(例如,“something.pdf”等价于“something.PDF”、“something.PdF”等)。

如果您询问此问题是为了允许上传文件,那么出于安全原因,您还应该进行服务器端检查以确保上传的文件实际上是 PDF。在 javascript 中进行客户端检查不足以保证安全性。

【讨论】:

【参考方案5】:

您可以使用match方法检查名称字符串是否以.pdf结尾。


var fileName1 = "something.pdf";
var fileName2 = "other.pdf.not.valid";
var fileName3 = "somethingpdf";

var outputDiv = 'output';

validatePdfFileName(fileName1, outputDiv);
validatePdfFileName(fileName2, outputDiv);
validatePdfFileName(fileName3, outputDiv);

function validatePdfFileName(fileName, outputDivId) 
  var outputDiv = document.getElementById(outputDivId);


  if (fileName.match(/\.pdf$/)) 
    outputDiv.innerHTML = outputDiv.innerHTML + "</br> valid pdf file name: " + fileName + " </br>";
   else 
    outputDiv.innerHTML = outputDiv.innerHTML + "</br> invalid pdf file name: " + fileName + " </br";
  
&lt;div id="output"&gt;Output&lt;/br&gt;&lt;/div&gt;

【讨论】:

试试“somethingpdf”?【参考方案6】:

对我有用的正则表达式如下

^[a-zA-Z�-ú0-9\s]3,50[.]1(([pP][dD][fF]))$

你可以在网站上测试一下

https://regexr.com/

【讨论】:

不适合我!它匹配aaaapdf @toto 请再检查一遍

以上是关于如何使用 RegEx 检查表单输入是不是以 .pdf 结尾的主要内容,如果未能解决你的问题,请参考以下文章

当我将表单提交到服务器时,如何检查表单中是不是存在输入字段?

Python/FLASK - html 表单返回字符串。如何检查它是不是包含数字?

jQuery检查表单输入是不是为空,除了一个

如何使用正则表达式检查用户输入是不是仅包含特殊字符?

使用 Java Regex,如何检查字符串是不是包含集合中的任何单词?

Regex-创建验证以强制一个字符串包含2个以上的单词