Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   RegExp для всего кроме целого числа или десятичной дроби (https://javascript.ru/forum/misc/12768-regexp-dlya-vsego-krome-celogo-chisla-ili-desyatichnojj-drobi.html)

ruslanchek 02.11.2010 14:03

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

var regexp = new RegExp('[^0-9.]');
var str = '0.7';
var result = str.replace(regexp, '');
alert(result);


Но оно позволяет ввести такое число - "0.756.12.12.12.23...", а нужно, чтобы только одна точка могла быть.

Спасибо всем огромное! :-)

vladlen 02.11.2010 14:12

^(\d+)?([.,]\d+)

exec 02.11.2010 18:06

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

vladlen 03.11.2010 02:16

Цитата:

Сообщение от exec (Сообщение 77084)
^(?:\d+(?:\.\d+)?)$

И че мы добились не захватывающей маской? Да еще и по жесткому условию

exec 03.11.2010 04:17

<script type='text/javascript'>
	alert(/^(\d+)?([.,]\d+)/.test('7')); // false
	alert(/^(\d+)?([.,]\d+)/.test('7.5d')); // true
</script>

vladlen 03.11.2010 13:04

exec, я понял :)
Только ты написал
Цитата:

^(?:\d+(?:\.\d+)?)$
А надо было: (\d+)?([\.,]\d+)?

exec 03.11.2010 14:06

<script type='text/javascript'>
	alert(/(\d+)?([\.,]\d+)?/.test('epic7fail')); // true
</script>


test() проверяет не на полное соответствие строки, а на вхождение подстроки, подходящей под регулярное выражение.

рони 03.11.2010 15:26

А может проще без регулярок )))
var str = '0.756';
var result =  isNaN(str)?'':str;
alert(result);

Aetae 03.11.2010 16:52

Цитата:

Сообщение от рони (Сообщение 77258)
А может проще без регулярок )))
var str = '0.756';
var result =  isNaN(str)?'':str;
alert(result);

Гениально!)))

bugmenot 03.11.2010 22:05

alert(isNaN("Infinity"));

Цитата:

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

Aetae 03.11.2010 22:32

Цитата:

Сообщение от bugmenot (Сообщение 77311)
alert(isNaN("Infinity"));

Ну да, ну на...
alert(isNaN('0xff22'));

рони 04.11.2010 00:57

ок тогда с регуляркой )))
var str = '7.07';
var regexp = /^\d+(\.\d+)?$/;
var result = regexp.test(str)?str:'';
alert(result);

Sweet 04.11.2010 01:35

Почему не решить задачу в лоб?:)
var string = 'df098.65llkj';
alert(+string.match(/\d+\.\d+|\d+/));

klimashkin 08.11.2010 14:25

Предложу свой вариант.
Позволяет точку, запятую и минус, вообщем, все что нужно.

var str = 'd-f-098.65llkj';
alert(str.match(/-{0,1}(?:\d+(?:\.|,)\d+|\d+)/));

monolithed 08.11.2010 14:28

Цитата:

Сообщение от klimashkin
var str = 'd-f-098.65llkj';
alert(str.match(/-{0,1}(?:\d+(?:\.|,)\d+|\d+)/));


А если это дефис?

klimashkin 08.11.2010 14:41

А чем дефис при вводе цифр отличается от минуса? Обычно дефис перед цифрой - знак отрицания. Если не предполагается ввод отрицательных чисел, удаляйте его из сравнения


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