我的JavaScript似乎没有运行

时间:2014-11-27 22:08:16

标签: javascript regex onload

我目前正在尝试创建一个在输入字段中工作的正则表达式。 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>

2 个答案:

答案 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;
    }
}

DEMO