Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Регулярка на дробные числа (https://javascript.ru/forum/css-html/19074-regulyarka-na-drobnye-chisla.html)

shkarbatov 25.07.2011 15:06

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

Я вот пробовал, но точку можно ввести много раз и ее можно ввести первым символом.
/[^\d.]/g

И можно вводить как угодно: ....22222.2.2.

Помогите пожалуйста

kobezzza 25.07.2011 15:08

\d+\.\d+

shkarbatov 25.07.2011 15:15

Не получилось =(

В отличие от моего варианта, тут получилось ввести:
asdasd123......23.

Может еще есть варианты?

kobezzza 25.07.2011 15:18

Значит вы не правильно что-то сделали, ибо моя регулярка работает:)
http://www.pcre.ru/eval/%5Cd%2B%5C.%...gfgfgfg.22323/ вот ссылка на неё

shkarbatov 25.07.2011 15:18

Или может я что-то не так делаю?

<script>
 function amounte(elem) {
   var a = document.getElementById('a');
    elem.value = elem.value.replace(/@^\d+\.\d+$@/, '');   
    // elem.value = elem.value.replace(/[^\.]/g, '');   
   // elem.value = elem.value.replace(/^-?\d+[\.|\,]?\d+$/, '');   
   if(elem.value >= 2)
    a.innerHTML = "";
   else
    a.innerHTML = "Введите тираж от 2, тыс";
 }
</script>


<p class="type1">
		<input name="amount_" onkeyup="amounte(this)" />	Тираж, тыс
		<div id="a"></div>
	</p>

kobezzza 25.07.2011 15:23

Цитата:

/@^\d+\.\d+$@/
Хм.. а что делает символ @?

shkarbatov 25.07.2011 15:28

Это как вариант.

Я подставлял Вашу регулярку, но она тоже не работает

kobezzza 25.07.2011 15:29

Она работает) это 100%) Я тебе скинул ссылку на конструктор, если не веришь)

Моно конеш пробельные символы ещё учесть
^\s*\d+\.\d+\s*$

shkarbatov 25.07.2011 15:50

Честно говоря у меня там вообще ничего не отобразилось. Пробывал в разных браузерах.

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

Потом вставляю Вашу и ввожу что хочу.

Непонятно как-то.

shkarbatov 25.07.2011 16:54

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

У меня есть поле, и мне надо разрешить ввод только цифр и одной точки (во время ввода, на этапе ввода),

dmitriymar 25.07.2011 17:06

замени в регулярке kobezzza \. на \.? и проблема с множеством точек уйдёт
и + на * -на вариант чисел типа .76 и 76.
итого ^\d*\.?\d*$

dmitriymar 25.07.2011 17:16

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

B@rmaley.e><e 25.07.2011 17:38

Цитата:

Сообщение от kobezzza
\d+\.\d+

alert(/\d+\.\d+/.test('asffg3.4fsf'))


А надо так: ^\d+\.\d+$
P.S. Aetae зря удалил свой пост.

Aetae 25.07.2011 17:57

Подумал, что все и так тут вумные, разбирутся) А вон оно как.)

Volk_88 29.07.2011 01:05

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

<input name="amount_" onkeydown="amounte(event, this)" />  Тираж, тыс
<div id="a"></div>

<script language="javascript">
function amounte(event, elem){
	var kc = event.keyCode, v = elem.value, l = elem.value.length, cancel = false;
	
	// Разрешаем Backspace (<--)
	if(kc == 8) return;
	
	// Проверям повторый ввод точки или запятой
	if((kc == 110 || kc == 188 || kc == 190) && /(\.|\,)/.test(v)){
		cancel = true;
	}
	
	// Разрешаем вводить символы: 0123456789.,
	if(!((kc > 48 && kc < 58) || (kc > 95 && kc < 106) || kc == 110 || kc == 188 || kc == 190) || (l == 0 && (kc == 110 || kc == 188 || kc == 190))){
		cancel = true;
	}
	
	if(cancel){ // Завершаем событие, символ не печатается в поле
		if(event.preventDefault) event.preventDefault();
		if(event.stopPropagation) event.stopPropagation();
		event.cancelBubble = true;
		event.returnValue = false;
		return false;
	}
}
</script>


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