我创建了一个reg exp,用于仅验证列表中参数p的值介于100和9999之间的URL。 因此,从下面给出的列表中,只有第3和第4个URL在输入文本框时需要返回true作为输出。
http://www.website.com/our-resources/news/?p=1
http://www.website.com/example/voice-of-the-customer/news/?p=12
http://www.website.com/our-resources/news/?p=123
http://www.website.com/example/?p=4321
http://www.website.com/example/products/touchchat/news/?p=12345
HTML
<input type=url/>
<button>Validate</button>
<div id=status></div>
的Javascript
$('button').click(function(){
var val = $('input').val();
var regex = /^(https?:\/\/)?[a-z0-9-]*\.?[a-z0-9-]+\.[a-z0-9-]+(\/[^<>]*)?$/;
var isValid = regex.test(val);
$('#status').text(isValid);
});
但是这个正则表达式对所有URL都返回true。 我应该对这个表达做出什么改变?
答案 0 :(得分:2)
更简单的解决方案是retrieve the querystring parameter from the URL,然后检查其值是否符合您的界限:
$('button').click(function() {
var p = parseInt(getParameterByName('p', $('input').val()), 10) || 0;
var isValid = p >= 100 && p <= 9999;
$('#status').text(isValid);
});
function getParameterByName(name, url) {
if (!url)
url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results)
return null;
if (!results[2])
return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
&#13;
body {
font: 10pt Verdana;
}
input {
width: 100%;
display: block;
margin-bottom: 1em;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="url" value="http://google.com/" />
<button>Validate</button>
<div id="status"></div>
&#13;
答案 1 :(得分:1)
您可以使用URL
var fnGetURL = ( strURL ) => {
try
{
return new URL( strURL );
}
catch(e)
{
return null;
}
};
如果未返回null
,则获取searchParams
var fnIsValidURL = ( strURL ) => {
var url = fnGetURL( strURL );
if ( url )
{
var p = +url.searchParams.get("p");
return p >= 100 && p <= 9999;
}
return false;
};
<强>演示强>
var fnGetURL = (strURL) => {
try {
return new URL(strURL);
} catch (e) {
return null;
}
};
var fnIsValidURL = (strURL) => {
var url = fnGetURL(strURL);
if (url) {
var p = +url.searchParams.get("p");
return p >= 100 && p <= 9999;
}
return false;
};
var urlArr = ["http://www.website.com/our-resources/news/?p=1",
"http://www.website.com/example/voice-of-the-customer/news/?p=12",
"http://www.website.com/our-resources/news/?p=123",
"http://www.website.com/example/?p=4321",
"http://www.website.com/example/products/touchchat/news/?p=12345"];
urlArr.forEach( function(url){
console.log( url, fnIsValidURL(url) );
});
&#13;
答案 2 :(得分:0)
试试这个:
function isValidParam(url) {
if ($.urlParam('p',url) > 99 && $.urlParam('p',url)<10000) {
return true;
}
return false;
}
调用上述方法检查网址有效性
$.urlParam = function(name,url) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)')
.exec(url);
if (results == null) {
return null;
} else {
return results[1] || 0;
}
};
答案 3 :(得分:0)
这可能过于简单,但我发现这个正则表达式适用于您正在寻找的内容。
/(?:http://[\S]*)\/\?p=(\d{3,4})$/g