2015-12-10 5 views
0

У меня есть текстовое поле, которое может принимать только целые и десятичные числа на каждой новой строке. Мне нужно регулярное выражение JQuery, которое будет проверять ввод на Focus Out. Таким образом, значение в каждой строке должно быть целым или десятичным.Regex для проверки целых и десятичных чисел в текстовом поле

Ex:

Допустимые сценарии:

1 
51425.125 
2552 
600000 
1.51425 
3.65 

инвалидные Сценарии:

.123 
123. 
123. 56 
1213.56.25 
234. (spaces after the decimal point) 

Я пробовал различные регулярные выражения комбинаций, но никто не казалось, работает отлично:

\b\s([-+]?(\d+|\.\d+|\d+\.\d*))($|[^+-.]) 

Это регулярное выражение не работает, когда имеется 2 десятичных значения.

\b[0-9\s]*(\.*[0-9\s]*)* 

Это регулярное выражение позволяет использовать пространство между значениями и после них.

\b(?:^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[1-9])?)(?!\S) 

Это регулярное выражение не позволяет пользователю вводить многострочные значения.

Поехал через несколько ссылок, но никто, кажется, работает для меня:
Regular Expression for Decimal or Blank
Regular expression - number with spaces and decimal comma
Decimal number regular expression, where digit after decimal is optional
http://regexone.com/problem/matching_decimal_numbers

ответ

0

См this JSFiddle:

/^\d+(?:\.\d+)?$/gm 

JavaScript

$("#input").on("input", function(){ 
    var validateThis = $(this).val(); 
    var validateCount = validateThis.split("\n").length; 
    var result = validateThis.match(/^\d+(?:\.\d+)?$/gm); 
    if(result && result.length == validateCount){ 
     $("#result").text("Valid input! :)"); 
    } else{ 
     $("#result").text("Invalid input! :("); 
    } 
}); 

HTML

<textarea id="input" rows="4"></textarea> 
<div id="result"></div> 
+0

Похоже, что нужно работать для данных сценариев. [ '/^\d+(\.\d+)?$/gm'] (https://regex101.com/r/zJ7jR2/1) – Tushar

+0

Это не принимает новый символ строки и, следовательно, выдает ошибку. – Arthas

+0

@ Батман Ах, пропустил эту часть вопроса. Лемм посмотрю, могу ли я его настроить. – Arg0n

0

Так мы можем включать \ п или \ г \ п в нашем RegeEx?

Да, мы можем. Вот выражение, которое проверяет, состоит ли весь текст строк с номерами:

^\d+(\.\d+)?(\n\d+(\.\d+)?)*\n?$ 
  • ^ ... $ - Весь текст должен соответствовать.
  • \d+(\.\d+)? - по крайней мере, одна цифра, необязательно с последующим периодом и по меньшей мере одну цифру
  • (\n…)* - следовать любое количество (в том числе нуль): перевод строки с ...
  • \n? - Разрешить перевод строки в конце (если ты хочешь).