2014-11-27 4 views
0

В настоящее время я пытаюсь создать регулярное выражение для работы в поле ввода. Сам JavaScript не возвращает ошибок в консоли JS Chrome, но поскольку onLoad() даже не работает, я очень смущен. Вот мой сайт, если вы хотите увидеть это сами: users.aber.ac.uk/mta2/cs25010Мой JavaScript, похоже, не работает

<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

Вы не зовем 'onLoad' везде. Просто определение этого не делает много. Вы также должны «использовать» его. –

+0

, но это все еще не объясняет, почему мой validateFilter() не запускается. –

+0

Правда, но вы не сказали, что он не запускается. Вы просто говорили о 'onLoad'. Откуда вы знаете, что 'validateFilter' не запускается? Что происходит? –

ответ

2

нужно изменить, если заявление на ложь, как этот

if(regEx.test(input) == false|| regEx2.test(input) == false) 
+0

спасибо! мой плохой ...:/ –

+0

@MaxAtkins: Есть больше проблем с вашим кодом, см. мой ответ. –

0

Вы не объясняя, что именно не так с 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; 
    } 
} 

DEMO

+0

спасибо :) помогает много! –

Смежные вопросы