How can I make a URL Input form require the input to be both a valid URL, and end in a specific filetype.
For example, this is my input:
<input name="bg" placeholder="" type="url">
As you can see, It is using the URL type, which restricts it to a valid http:// domain, but I would like the input field to only accept .png, .jpg, and .gif files.
Can this be achieved through html or javascript, and if so, how?
Thanks!
How can I make a URL Input form require the input to be both a valid URL, and end in a specific filetype.
For example, this is my input:
<input name="bg" placeholder="https://website.com/image" type="url">
As you can see, It is using the URL type, which restricts it to a valid http:// domain, but I would like the input field to only accept .png, .jpg, and .gif files.
Can this be achieved through html or javascript, and if so, how?
Thanks!
Share Improve this question asked Nov 18, 2016 at 23:35 Carter RoeserCarter Roeser 3604 silver badges23 bronze badges 4- 1 So what input do you need? Url or Image? – P.S. Commented Nov 18, 2016 at 23:38
- @CommercialSuicide It needs to be an image link like domain.com/image.png, so it needs to stay as a URL Input, but accept only image links. – Carter Roeser Commented Nov 18, 2016 at 23:40
- 2 Any JavaScript validation method can be easily be disabled/overridden by a decent scriptkiddy. Regard JavaScript validation as a helper for non-malicious users (you reduce number of calls to server while letting them know about common errors/limitations), not as a way of excluding malicious users. You can only handle those server-side. – tao Commented Nov 18, 2016 at 23:43
- @CarterRoeser but it will always exists an extension? If so, you can use this solution stackoverflow.com/a/12818466/2990234 – Anfuca Commented Nov 18, 2016 at 23:43
3 Answers
Reset to default 17You don't really need Javascript here, you can use pattern
attribute for your input
(i have added CSS just for example):
input:valid {
border: 1px solid green;
}
input:invalid {
border: 1px solid red;
}
<input name="bg" placeholder="https://website.com/image" type="url" pattern="https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)(.jpg|.png|.gif)">
You can achieve this using regex, you would also want to check this server side in case the user has disabled javascript.
Javascript
$("#imageUrl").change(function() {
var t = $("#imageUrl").val()
var expression = https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)(.jpg|.png|.gif);
var regex = new RegExp(expression);
if (t.match(regex)) {
alert("Successful match");
} else {
alert("No match");
}
});
HTML
<input id="imageUrl" name="bg" placeholder="https://website.com/image" type="url">
Please go through the below code you will get the valid or invalid image url by blur the textbox.
function TextBoxChange()
{
var textboxValue=$("input[name=bg]").val();
var pattern=/https?:\/\/.*\.(?:png|jpg|gif)/i;
//alert(/https?:\/\/.*\.(?:png|jpg|gif)/i.test(textboxValue));
if(pattern.test(textboxValue))
{
$("#errorMsg").text("valid");
}
else
{
$("#errorMsg").text("invalid");
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="bg" placeholder="https://website.com/image" onblur="TextBoxChange()" type="url" >
<label id="errorMsg"></label>