2015-10-08 2 views
0

Я пытаюсь выполнить эту проверку регулярного выражения. (1 целое число, 3 цифры)Помощь с регулярным выражением Javascript

Действительно:

  • 0,236
  • 0,21
  • 1,231
  • 1,01

Недопустимый:

  • 12,23
  • 0,21323

Я хотел бы иметь только 1 цифру следует из десятичной дроби только с 0-3 знаками после запятой.

Любая помощь будет отличной. Я пробовал: ^(([0-9]{1})?(?=\.)[0-9]{0,3})|([0-9]{1})$ но не блокировка.

Редактировать: Я должен был добавить, что я использую плагин JQuery с именем inputmask. Я хотел бы, чтобы входная маска принимала только мое требование.

+0

@Tushar: Это будет соответствовать двум третям его «недействительных» примеров. –

+0

Будет ли введен ваш номер сам по себе. Будет ли другой текст? Являются ли они действительными: '$ 1.23',' 0.325', 'some text 1.23'? – vol7ron

+0

Не переименовывайте вопрос, чтобы включить слово «SOLVED», см. [Как принимается ответ?] (Http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer- работа) – Quentin

ответ

1

Я хотел бы иметь только 1 целое число, следующее десятичным числом с точностью до 0-3 знаков после запятой.

К «1 целое число» Я понимаю, что вы имели в виду одну цифру как 12 это единое целое число. Если это так:

\d\.\d{0,3} 

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

^\d\.\d{0,3}$ 

Обратите внимание, что правила вы данные позволяют 1., который, кажется, как вы не можете. Если вы этого не сделаете, то мы должны сделать немного больше работы:

^\d(?:\.\d{1,3})?$ 

Это говорит: одна цифра необязательно следуют через . с 1-3 цифр. Он имеет привязки «цельной строки», удаляет их, если вы их не хотите.

Живой пример используя тот последний:

var input = document.querySelector("input"); 
 
var rex = [ 
 
    /\d\.\d{0,3}/, 
 
    /^\d\.\d{0,3}$/, 
 
    /^\d(?:\.\d{1,3})?$/ 
 
]; 
 
input.oninput = input.onpaste = input.onkeypress = updateDisplay; 
 

 
function updateDisplay() { 
 
    rex.forEach(function(r, index) { 
 
    var display = document.getElementById("r" + index); 
 
    if (!input.value) { 
 
     display.innerHTML = "--"; 
 
    } else if (input.value.match(r)) { 
 
     display.innerHTML = "valid"; 
 
    } else { 
 
     display.innerHTML = "INVALID"; 
 
    } 
 
    }); 
 
}
<input type="text"> 
 
<p><code>/\d\.\d{0,3}/</code> says: <span id="r0"></span></p> 
 
<p><code>/^\d\.\d{0,3}$/</code> says: <span id="r1"></span></p> 
 
<p><code>/^\d(?:\.\d{1,3})?$/</code> says: <span id="r2"></span></p>

+0

Спасибо. Я пробовал все три, но все равно не работает. К сожалению, я должен был упомянуть, что я использую плагин под названием «inputmask». Я хотел бы только разрешить пользователю вводить 1 цифру, десятичную цифру и 0-3 цифры. – user3407584

+0

@ user3407584: У меня была опечатка в начале третьего. Регулярные выражения определенно работают, см. Живой пример. –

+0

Вы должны принять этот ответ. Через несколько минут он избил меня до удара. Я думаю, что это лучше, чем у меня. –

1

Чтобы сделать это с помощью jquery-inputmask используйте этот

<input id="example2" data-inputmask-regex="/^\d{1}\.\d{0,3}$/" /> 

, а затем в файле JavaScript, добавьте этот

$(document).ready(function(){ 
    $("#example2").inputmask("Regex"); 
}); 

Вот пробоя Regex

^ - Regex должна начинаться с этим выражением

\d{1} - ровно 1 цифры от 0 до 9

\. - с последующим периодом. Важно отметить, что периоды должны быть экранированы

\d{0,3} - Последовали 0 до 3 цифр

$ - Regex должен заканчиваться с этим выражением

я тестировал для всех ваших примеров.

+0

Спасибо. Я попытался подняться, но, поскольку я новичок, это не позволит мне это сделать. :( – user3407584

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