如何使用 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));
<input type="text" name="filelocation" id="filelocation" placeholder="Must include .pdf file extension">
【讨论】:
【参考方案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";
<div id="output">Output</br></div>
【讨论】:
试试“somethingpdf”?【参考方案6】:对我有用的正则表达式如下
^[a-zA-Z�-ú0-9\s]3,50[.]1(([pP][dD][fF]))$
你可以在网站上测试一下
https://regexr.com/
【讨论】:
不适合我!它匹配aaaapdf
@toto 请再检查一遍以上是关于如何使用 RegEx 检查表单输入是不是以 .pdf 结尾的主要内容,如果未能解决你的问题,请参考以下文章
当我将表单提交到服务器时,如何检查表单中是不是存在输入字段?
Python/FLASK - html 表单返回字符串。如何检查它是不是包含数字?