我目前正在尝试创建一个在输入字段中工作的正则表达式。 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>
答案 0 :(得分:2)
你必须将if语句改为false,如此
if(regEx.test(input) == false|| regEx2.test(input) == false)
答案 1 :(得分:0)
您没有解释validateFilter
究竟出了什么问题。但是看一下这个功能和正则表达式,很明显他们不会做你想做的事。
如果你想检查一个字符串是否只包含 数字或像x.xx
那样的小数,那么你的表达式应该是
^\d+(\.\d{2})?$
重要的部分是^
和$
。他们锚定表达式,因此整个字符串必须匹配模式,而不仅仅是字符串的 part 。例如。你的表达(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;
}
}