[英]My JavaScript doesn't seem to run
我目前正在尝试创建一个正则表达式以在输入字段中工作。 JavaScript本身在JS Chrome控制台中不返回任何错误,但是由于onLoad()甚至无法正常工作,我感到非常困惑。 这是我的网站,如果您想自己看的话:users.aber.ac.uk/mta2/cs25010
<script>
var regEx = new RegExp("[0-9]+\.[0-9][0-9]");
var regEx2 = new RegExp("[0-9]+");
function validateFilter()
{
var input = document.forms["filterPrice"]["price"].value;
if(regEx.test(input) == true || regEx2.test(input) == true)
{
alert("Input must be only numbers. Decimal allowed");
return false;
}
}
function onLoad()
{
alert("HI");
}
</script>
<form name="filterPrice" action="homepage.php" method="GET" onsubmit="return validateFilter()">
<select name = priceSelect>
<option value = "Greater"> Filter prices greater than </option>
<option value = "Less"> Filter by prices less than </option>
</select>
<input id ="priceInput" name="price" type ="text"> </input>
<button> Go </button>
</form>
您必须像这样将if语句更改为false
if(regEx.test(input) == false|| regEx2.test(input) == false)
您没有在解释validateFilter
到底有什么问题。 但是从函数和正则表达式来看,很明显它们并没有执行您想做的事情。
如果要检查字符串是否仅包含数字或小数(例如x.xx
则您的表达式应为
^\d+(\.\d{2})?$
重要的部分是^
和$
。 它们锚定表达式,因此整个字符串必须与模式匹配,而不仅仅是字符串的一部分 。 例如,您的表达式( new RegExp("[0-9]+")
也匹配"foo9"
和"123foobar"
。
另一个表达式new RegExp("[0-9]+\\.[0-9][0-9]")
也不正确。 它不仅匹配0.00
而且匹配0x00
。 这是因为您使用的是字符串来定义表达式,并且\\
也是字符串的转义字符。 因此,您创建的表达式实际上是[0-9]+.[0-9][0-9]
,其中.
匹配任何字符。
此外,如果表达式不匹配,你要显示的警告,即当regEx.text(input)
返回false
,不是true
。
修改后的代码:
var regEx = /^\d+(\.\d{2})?$/;
function validateFilter() {
var input = document.forms["filterPrice"]["price"].value;
if (!regEx.test(input)) {
alert("Input must be only numbers. Decimal allowed");
return false;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.