для проверки регулярных выражений прямо в браузере!

я есть некоторая проверка на стороне клиента для текстового поля, которая позволяет только числа до двух десятичных знаков без другого ввода.

Этот сценарий был основой для ввода только числовых значений, однако его необходимо адаптировать, чтобы он мог занимать десятичную точку, за которой следовало только до двух десятичных знаков.

Я пробовал такие вещи, как/[^\d].\d{0,2}, но тогда вызов замены не сработает, и я понятия не имею, как это сделать.

Код
<script type="text/JavaScript">
  function valid(f) {
    if (!/^\d*$/.test(f.value)) {
      f.value = f.value.replace(/[^\d]/g,"");
      alert("Invalid number");
    }
  }
</script>
Запись

Мне нужно сопоставить пустую строку. Если предоставлена ​​пустая строка и форма отправлена, значение по умолчанию возвращается к нулю.

 Prestaul22 янв. 2009 г., 15:27
Вы действительно хотите добиться того, чтобы пользователь мог вводить только две цифры справа от десятичной запятой, или вы можете просто подтвердить, что это число с округлением до двух десятичных разрядов?
 Kezzer23 янв. 2009 г., 09:37
В случае потери точности крайне важно, чтобы пользователь знал об этом. Эти цифры, как правило, очень важны, к сожалению.
 Lightness Races in Orbit15 нояб. 2011 г., 17:39
Десятичные точки не совпадают с десятичнымимест!

Ответы на вопрос(7)

. означает в RegEx: любой персонаж, вы должны поставить обратную косую черту перед ним.\.

Это было бы лучше:

/^\d+(\.\d{0,2})?$/

Части, которые я включил:

Вам нужно по крайней мере 1 номер перед точкой. Если вы не хотите этого, замените+ с участием* но тогда и пустые строки будут сопоставлены.Если у вас есть десятичные значения, вам нужна точка впереди.Там не должно быть ничего после числа,$ обозначает конец ввода.

и для заменяющей части вы должны также включить точку

f.value.replace(/[^\d\.]/g, "")

Редактировать:

Если это для проверки входных данных в реальном времени, почему бы вам не перехватить ключевые события и не проверить их достоверность (создав строку в памяти) или просто удалить последний символ в поле?

 Kezzer28 янв. 2009 г., 12:06
Удаление последнего символа в поле для проверки правильности будет полезно, только если это "." характер хотя.
Regex
/^\d+(\.\d{1,2})?$/
JavaScript

  if(!f.value) { // Test if text field is empty
    f.value = 0; // Initialize value to 0
    console.log("Valid number"); // Let user know input is OK
  } else if (!/^\d+(\.\d{1,2})?$/.test(f.value)) { // Test regex
    f.value = ""; // Empty the text box
    console.error("invalid number"); // Let user know input is not OK
  } else {
    console.log("Valid number"); // Let user know input is OK
  }
}

document.getElementById("testbutton").addEventListener( // Add event listener to button
  "click",
  valid.bind( // Bind the text field to the `value` function
    this, 
    document.getElementById("testfield")
  )
);
<input id="testfield" value="15.1" />
<button id="testbutton">Test expression</button>

объяснение/ / : начало и конец выражения^ : все, что следует, должно быть в начале строки, которую вы тестируете\d+ : должна быть хотя бы одна цифра( )? : эта часть не является обязательной\. : здесь идет точка\d{1,2} : здесь должно быть от одной до пяти цифр$ : все, что предшествует этому, должно быть в конце строки, которую вы тестируетеЧаевые

Вы можете использоватьregexr.com или жеregex101.com для проверки регулярных выражений прямо в браузере!

Вы можете использовать функцию JavaScript вместо регулярных выражений

function IsValid(value) {
    var split = value.split('.');

    if (split.length != 2) {
        return false;
    }
    else if (split[1].length > 2 || !Number(split[1])) {
        return false;
    }
    else if (!(split[0] == '' || split[0] == '0')) {
        return false;
    }

    return true;
}

Вы действительно хотите сделать это с помощью регулярного выражения?

function valid(f) {
    if(isNaN(f)){return false;}
    return 100 * f == parseInt(100*f,10);
}

где мы хотим предотвратить более одного десятичного знака (например, 2..3, .2. И т. Д.)

Ниже приведена функция Javascript для этого.

 if (MoreThanOnePoint(document.getElementById("txtNoofHrs").value) == false) {
     alert("Please enter one decimal only");
     document.forms[0].txtNoofHrs.focus();
     return false;
 }

 function MoreThanOnePoint(strString) {
     var strChar;
     var blnResult = true;
     var varcount = 0;

     for (i = 0; i < strString.length && blnResult == true; i++) {

         if (strString.charAt(i) == ".") {
             varcount++;
             if (varcount > 1) {
                 //alert("Please enter one decimal only");
                 blnResult = false;
             }
         }
     }
     return blnResult;
 }
Решение Вопроса

. поэтому нуждается в экранировании.

/^(?:\d*\.\d{1,2}|\d+)$/

Это соответствует 123.45, 123.4, 123 и .2, .24, но не строке emtpy, 123., 123.456

 Kezzer22 янв. 2009 г., 12:33
Ах, очень мило, однако мне нужно сопоставить пустую строку. Если предоставлена ​​пустая строка и форма отправлена, значение по умолчанию возвращается к нулю.
 Kezzer22 янв. 2009 г., 12:36
Кроме того, если вы введете «123.» тогда я получу сообщение об ошибке, как только я поставлю точку в поле ввода, так что, хотя это полезно, на самом деле это хорошо только для представления формы. Эта стадия является фактической стадией ввода.
 VISHAL SINGH07 сент. 2017 г., 08:46
мы можем усечь число после двух десятичных с помощью регулярных выражений

Это очень близко, но линия

f.value = f.value.replace(/[^\d\.]/g, "");

На самом деле не похоже на работу. На самом деле я теряю фокус текстового поля по какой-то причине. Хотя, возможно, это мой код;)

 Kezzer23 янв. 2009 г., 09:36
Хотя это для живого вклада, так что обычно это работает, но когда я на самом деле делаю это против живого вложения, мне кажется, что это не работает. Я мог бы что-то не так, однако.
 Georg Schölly22 янв. 2009 г., 13:00
alert ("Test10.50Test" .replace (/ [^ \ d \.] / g, "")); возвращает 10.50, поэтому должно работать. Что не работает, например, когда есть более одной точки.

Ваш ответ на вопрос