Вопрос по javascript, regex – Регулярное выражение в JavaScript для проверки десятичных чисел

12

Я хочу регулярное выражение в JavaScript для проверки десятичных чисел.

Должно быть разрешено только до двух десятичных знаков. Например, это должно позволить10.89 но нет10.899.

Следует также разрешить только один период (.). Например, это должно позволить10.89 но нет10.8.9.

дубликат: stackoverflow.com/q/468655/55209 safarov
stackoverflow.com/q/468655/55209 Artem Koshelev

Ваш Ответ

10   ответов
2

Пожалуйста, смотрите мой проект кросс-браузерного фильтра значения элемента ввода текста на вашей веб-странице с использованием языка JavaScript:Фильтр клавиш ввода , Вы можете отфильтровать значение в виде целого числа, числа с плавающей запятой или написать собственный фильтр, например фильтр телефонных номеров. Посмотрите пример пользовательского фильтра ввода числа с плавающей запятой с десятичным указателем и ограничением до 2 цифр после десятичного указателя:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov [email protected]">
	<meta http-equiv="Content-Type" content="text/h,tml; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Float field</h1>
<input id="Float" 
	onchange="javascript: onChangeFloat(this)"
	onblur="inputKeyFilter.isNaN(parseFloat(this.value), this);"
/>
<script>
	function CreateFloatFilterCustom(elementID, onChange, onblur){
		try{
			inputKeyFilter.Create(elementID
				, onChange
				, function(elementInput, value){//customFilter
					if(value.match(/^(-?\d*)((\.(\d{0,2})?)?)$/i) == null){
						inputKeyFilter.TextAdd(isRussian() ?
								"Допустимый формат: -[0...9].[0...9] или -[0...9]e-[0...9]. Например: -12.34 1234"
								: "Acceptable formats: -[0...9].[0...9] or -[0...9]e-[0...9]. Examples: -12.34 1234"
							, elementInput);
						return false;
					}
					return true;
				}
				, onblur
			)
		} catch(e) {
			consoleError("Create float filter failed. " + e);
		}
	}
	
	CreateFloatFilterCustom("Float");
	
	function onChangeFloat(input){
		inputKeyFilter.RemoveMyTooltip();
		var elementNewFloat = document.getElementById("NewFloat");
		var float = parseFloat(input.value);
		if(inputKeyFilter.isNaN(float, input)){
			elementNewFloat.innerHTML = "";
			return;
		}
		elementNewFloat.innerHTML = float;
	}
</script>
 New float: <span id="NewFloat"></span>
</body>
</html>

Также смотрите мою страницупример фильтра клавиш ввода

Можем ли мы ограничить до десятичного знака только 6 цифрами?
заменить из /^(-?\d*)((\.(\dndom0,2casts)?)?)$/i на / ^ (-? \ d {0,6}) ((\. ( \ d *)?)?) $ / я
29

Попробуйте следующее выражение:^\d+\.\d{0,2}$ Если вы хотите, чтобы десятичные разряды были необязательными, вы можете использовать следующее:^\d+(\.\d{1,2})?$

EDIT: Чтобы проверить соответствие строки в Javascript, используйте следующий фрагмент:

var regexp = /^\d+\.\d{0,2}$/;

// returns true
regexp.test('10.5')
@micha, извините, исправил опечатку в моем первом регулярном выражении
8

Regex

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

Demo

var regexp = /^\d+(\.\d{1,2})?$/;

console.log("'10.5' returns " + regexp.test('10.5'));
console.log("'115.25' returns " + regexp.test('115.25'));
console.log("'1535.803' returns " + regexp.test('1535.803'));
console.log("'7' returns " + regexp.test('7'));
console.log("'.74' returns " + regexp.test('.74'));
console.log("'153.14.5' returns " + regexp.test('153.14.5'));
console.log("'415351108140' returns " + regexp.test('415351108140'));
console.log("'415351108140.5' returns " + regexp.test('415351108140.5'));
console.log("'415351108140.55' returns " + regexp.test('415351108140.55'));
console.log("'415351108140.556' returns " + regexp.test('415351108140.556'));


Explanation

  1. / / : the beginning and end of the expression
  2. ^ : whatever follows should be at the beginning of the string you're testing
  3. \d+ : there should be at least one digit
  4. ( )? : this part is optional
  5. \. : here goes a dot
  6. \d{1,2} : there should be between one and two digits here
  7. $ : whatever precedes this should be at the end of the string you're testing

Tip

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

это не похоже на работу для меня
@mercy: Не могли бы вы дать мне какие-нибудь подробности? Что вы подразумеваете под "не работает"? Какую проблему вы испытываете с предложенным мною решением?
3

Числа не более 2 десятичных знаков:

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

Это должно работать нормально. Пожалуйста, попробуйте :)

1

Попробуйте регулярное выражение, подобное этому:

(?=[^\0])(?=^([0-9]+){0,1}(\.[0-9]{1,2}){0,1}$)

Allowed: 1, 10.8, 10.89, .89, 0.89, 1000

Not Allowed: 20. , 50.89.9, 12.999, ., Null character Note this works for positive numbers

Это сработало для меня в JS. Спасибо
хотя несколько случаев не работали как .45
-2

Это работает?

[0-9]{2}.[0-9]{2}
. выступает за любого персонажа |[0-9] такой же как\d
24

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

позволит:

  1. 244
  2. 10.89
  3. 9.5

запретит:

  1. 10.895
  2. 10.
  3. 10.8.9
Как использовать ^ \ d + (\. \ D {0,2})? $ В javascript? Это дает ошибку Shardaprasad Soni
Привет, я хочу, чтобы 10. также. Shardaprasad Soni
Если я наберу 0000.100, который будет недопустимым десятичным, каким должен быть regExp?
@ShardaprasadSoni см. Мой пост для примера
0

 function CheckValidAmount() {
        var amounttext = document.getElementById('txtRemittanceNumber').value;
        var amount = parseFloat(amounttext);
        if (!(/^[-+]?\d*\.?\d*$/.test(amounttext))){
            alert('Please enter only numbers into amount textbox.')
            document.getElementById('txtRemittanceNumber').value = "10.00";
        }
    }

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

Спасибо ... :)

конечно, теперь это отредактировано .. теперь вы счастливы .... :)
Можете ли вы опубликовать код в виде текста, а не изображения?
0

по сравнению с ответом gven by mic ... он не проверяет ничего на некоторых платформах, над которыми я работаю ... если быть точным, то в действительности не работает в Dream Viewer ..

Настоящий .. я переписываю это снова .. которое будет работать на любой платформе .. "^[0-9]+(.[0-9]{1,2})?$".. thnkss ..

1

Я обнаружил, что могу использовать

^\d+(\.\d+)?$

для более чем двух знаков после запятой.

Похожие вопросы