Javascript заменяет строку на 8 и 9 не работает ... но другие числа делают ...? - PullRequest
6 голосов
/ 17 августа 2011

Проверьте этот скрипт ... запустите и увидите странность ..

http://jsfiddle.net/BjJTc/

Из jsfiddle

var m = 'Jan07';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));

var m = 'Jan08';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));


var m = 'Jan09';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));


var m = 'Jan10';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, '')));

Ответы [ 4 ]

10 голосов
/ 17 августа 2011

Это восьмеричная проблема: попробуйте parseInt(val, 10).Ведущий ноль заставляет его верить, что он восьмеричный. parseInt принимает второй необязательный параметр radix:

radix Целое число, представляющее основание вышеупомянутой строки.Хотя этот параметр является необязательным, всегда указывайте его, чтобы избежать путаницы читателя и гарантировать предсказуемое поведение.Разные реализации дают разные результаты, когда основание не указано.

Итак:

parseInt('09') // 0
parseInt('09', 10); // 9
4 голосов
/ 17 августа 2011

У вас проблема с основанием.Javascript интерпретирует 07, 08, 09 как восьмеричные числа.Десятичное число 7 и октальное число 07 соответствуют одному и тому же номеру, а 8 и 9 - нет.

Включите основание 10 в качестве второго параметра для всех ваших вызовов parseInt():

var m = 'Jan08';
var mm = 'Jan';
alert(m.replace(mm, ''));
alert(parseInt(m.replace(mm, ''), 10));
// ------------------------------^^^^^^
0 голосов
/ 17 августа 2011

Или просто потеряйте начальные буквы и любые начальные 0-

m='Jan08';
mm=/^\D+0?/,'');
alert(m.replace(mm, ''));
0 голосов
/ 17 августа 2011

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

var m = 'Jan07';
var d = Date.parse('01' + m); // Parse the 1st of the month
var y=Math.floor(d/(1000*60*60*24*365.24)) + 1970; // Convert to years since 1970, then add 1970
alert(y);

Не для самых элегантных решений, но вы получите год из вашего формата MMMyy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...