Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Проверка значения поля на ходу и обрезание лишнего.. (https://javascript.ru/forum/css-html/16468-proverka-znacheniya-polya-na-khodu-i-obrezanie-lishnego.html)

andreyy05 09.04.2011 15:07

Проверка значения поля на ходу и обрезание лишнего..
 
Здравствуйте, уважаемые форумчане!

Помогите пожалуйста решить задачу, честное слово пытался решить самостоятельно, но не получилось пока...

Есть форма(типо калькулятора), в которую можно вводить только число. Число может иметь дробную часть, т.е. содержать точку.

Нужно сделать проверку для этой формы. Чтобы если мы вводим туда не число, все что не число удалялось.

Я сделал так:

function f() {
var d = document.getElementById('d');
var re = /^[0-9]+\.?[0-9]*$/;

if(d.value.search(re) ==-1) { d.value="";}

}


<input type="text" value="0"  onKeyUp="f()" id="d" onblur="if(this.value == '') { this.value='0'}" onfocus="if (this.value == '0') {this.value=''}" />


Но при таком раскладе, удаляется все полностью... Т.е. если я ввел к примеру 1234бв -то удалится полностью вся строка. А мне нужно чтобы удалялись на каждом шаге ввода, только те символы, которые не подходят под маску.

Как здесь http://obmenov.com/

Я подозреваю, что как-то можно запоминать позицию, начиная с которой перестает совпадать, и потом обрезать строку по эту позицию...

Но функций найти не могу...

Matre 09.04.2011 15:34

Я на днях для интереса писал функцию, которая достаёт из строки число.

function parseNumber(obj) {
	obj = (obj + "").match(/[e\.0-9-]+/gi) || [];
	for (var i = 0; i < obj.length; i++)
		if (/^-?(?:\d?\.)?\d+(?:e-?\d+)?$/i.test(obj[i]))
			return +obj[i];
	return null;
}


Успешно парсит знак "-" перед числом, десятичную точку и экспоненту (числа вида 17E3 т.е. 17000).

Набросок кода для использования этой ф-ции:

var num = parseNumber(this.value);
if (num === null)
	this.value = "";
else
	this.value = num;


Часовой пояс GMT +3, время: 06:12.