Как вывести только цифры через document.write? JavaScript
Что нужно изменить, если было введено перед/после индексом/кса слова, то выводился только сам индекс в document.write, а не слова ( в смысле, как вывести только цифры через document.write )? Вопрос, над которым нужно подумать!
var personIndex = prompt(«Введите свой почтовый индекс»,»»);
function check(index)<
if(index.search(/^\d/) == -1)<
document.write(«Перед ведённым Вашим индексом \»» + index + «\» ничего не должно стоять, кроме индекса!»);
>
else if(index.search(/\d$/) == -1)<
document.write(«После ведённого Вашего индекса \»» + index + «\» ничего не должно стоять, кроме индекса!»);
>
else<
document.write(«Ваш индекс \»» + index + «\» успешно сохранён!»);
>
>
check(personIndex);
function setIndex(sign = 6) <
let index;
while (true) <
index = Number.parseInt(prompt(«Введите почтовый индекс»), 10);
if (!Number.isNaN(index)) <
index = Math.abs(index);
index = index.toString();
if (index.length === 6) <
break;
> else <
alert(«Индекс должен состоять из » + sign + » цифр!»)
>
> else <
alert(«Индекс должен содержать только цифры!»)
>
>
return index;
>
let index = setIndex();
document.write(index);
Чтобы убрать все символы кроме цифр, str = str.replace(/[^0-9]/g,»»);
А потом можно просто подсчитать количество символов в строке (чтобы их было 6) str.length
JavaScript | Как получить только цифры из строки?
Нам нужно из этой строки удалить все буквы и оставить только символы и цифры. Как это сделать?
В этом нам помогут регулярные выражения, классы символов и диапазоны классов. Все замены мы будем производить методом replace() .
Регулярному выражению будет присвоен глобальный флаг «g» для оценки всех повторений в строке. Заменять мы будем на пустую строку, что будет приравнено к удалению.
Получим слипшиеся цифры в виде одной строки:
только пробелы stroka.replace(/[^0-9, ]/g,"") пробелы и любые другие символы stroka.replace(/[^0-9,\s]/g,"")
В диапазон символов мы добавили пробел, поэтому нам вернулась строка с пробелами.
Альтернативный синтаксис
Можно использовать специальный экранированный класс символа (CharacterClassEscape), который обозначается буквой D .
Он находит сопоставления в строке, которые НЕ равны набору из десяти цифр.
Он экранированный — это значит, что перед D мы должны будем поставить символ обратной косой черты \ . Ну и конечно это всё мы будем вводить внутри шаблона регулярного выражения, который обозначается границами в виде двух косых линий / / .
То есть мы можем найти в строке все места где символ не соответствует одному из: 0123456789
var stroka color: #993300;">Привет1274 ме234ня зо65вут 7987Ефим!"
stroka.replace(/\D/g,'') '1274234657987'
Как перевести строку в массив и оставить только цифры JavaScript?
Требуется все числа, которые встречаются в строке, поместить в отдельный целочисленный массив. Функция должна возвращать этот массив. Например: «djhf117 gf4 h008dbsh79».
При том что регулярные выражения нельзя использовать. Должно возвращать массив чисел [117,4,0,0,8,79] Пример: введите сюда код
let math = 'djhf123 gf6 h006dbsh90'; let getNumbers = function(string) < const numArray = []; // Возвращаемый результат let numStr = ''; // Аккумулятор для цифр for (let i = 0; i < string.length; i++) < if (!isNaN(Number(string[i]))) < // Если символ является числом if (string[i] !== '') < if (numStr === '0'); numStr += string[i]; // numArray.push(Number(numStr)) continue; >if (numStr === '0') < // Если это 0, сразу добавляем в массив if (string[i] !== ' ') numStr += string[i]; numArray.push(Number(numStr)) // Это не ноль, добавляем в //аккумулятор >else < string[i] += numStr; continue; >> else < if (numStr !== '') < // Если в аккумуляторе что то есть, пушим numArray.push(Number(numStr)); numStr = ''; // и зануляем аккумулятор >> > if (numStr !== '') numArray.push(Number(numStr)); return numArray; > console.log(getNumbers(math));
4 ответа 4
let math = 'djhf117 gf4 h008dbsh79'; function getNumbers() < const numArray = []; // Возвращаемый результат let numStr = ''; // Аккумулятор для цифр for (let i = 0; i < math.length; i++) < if (!isNaN(Number(math[i]))) < // Если символ является числом if (math[i] === '0') < // Если это 0, сразу добавляем в массив numArray.push(Number(math[i])) >else < // Это не ноль, добавляем в аккумулятор numStr += math[i] >> else < // Встретилось не число if (numStr.length) < // Если в аккумуляторе что то есть, пушим numArray.push(Number(numStr)); numStr = ''; // и зануляем аккумулятор >> > return numArray; > console.log(getNumbers())
@SwaDэтот ответ мне более понятен,хоть он и не доработан,но разве через parseInt не удобнее перебирать числа? Или каждому своё)
В ответах SwaD и MrYogurt есть проблемы с обработкой нуля. Если вместо последовательности ‘008’ будет последовательность ‘1008’ , то в результатах не увидите число 1008
Предлагаю очень простой алгоритм без этого недочёта (и как по мне с более читабельным кодом):
- Является ли символ числом или нет, я вместо преобразований, предлагаю использовать проверку с помощью кода символа строки. Код 48 отвечает за символ нуля, потому при проверке стоит строгое неравенство
- Объявляем массив, куда будем класть все числа
- Объявляем переменную, куда будем складывать по одному символы, отвечающие за цифры
- С помощью цикла for of перебираем по одному все символы строки: 4.1. Если символ — это цифра и не ноль, то добавляем его в переменную строку иначе переходим к следующему символу 4.2. Если символ — это ноль, то смотрим на пустоту переменной строки. Если она пустая, значит мы встретили одиночный ноль, а значит надо его просто добавить в массив. Если она не пустая, то значит мы встретили ноль, который является продолжением другого числа, значит надо добавить в переменную строку. Переходим к следующему символу 4.3. Если встретили не цифру, то смотрим на пустоту переменной строки, если она пустая, то переходим к следующему символу, а если не пустая, то добавляем в массив преобразовав его в число
- Если после окончания цикла у нас переменная строка осталась не пустой, то добавлем это в массив преобразовав его в число
- Возвращаем массив
const isDigitButNotZero = (symbol) => < const code = symbol.charCodeAt(0); return code >48 && code const getNums = (str) => < const nums = []; let num = ''; for (const symbol of str) < if (isDigitButNotZero(symbol)) < num += symbol; continue; >if (symbol === '0') < if (num !== '') num += symbol; else nums.push(+num); continue; >if (num !== '') < nums.push(+num); num = ''; >> if (num !== '') nums.push(+num); return nums; > const nums1 = getNums('djhf117 gf4 h008dbsh79'); const nums2 = getNums('djhf117 gf4 h1008dbsh79'); console.log(nums1); console.log(nums2);
нужно через forEach вывести только числа из массива
Если У Вас задача сделать это именно при помощи forEach, то элементы в новый массив нужно добавлять принудительно, поскольку forEach это метод, который просто проходит по массиву, ничего не возвращая.
let a3 = [2, "hello", 3, "hi", 4, "Mazai"]; let a3_res = []; a3.forEach(function(elem) < if(typeof elem == "number") a3_res.push(elem); >); console.log(a3_res);
let a3 = [2, "hello", 3, "hi", 4, "Mazai"]; let a3_res = a3.filter(function(elem) < return typeof elem == "number"; >); console.log(a3_res);
у меня задача выглядит так (Дан массив a3 = [2, «hello», 3, «hi», 4, «Mazai»] — с помощью forEach переберите массив и создайте новый массив a3_res куда добавьте элементы данного массива являющиеся числом. Запускаться решение должно при вызове функции t3.)
@ВадимУманский вам тут продемонстрировали, что для определения числа вам не хватает typeof в сравнении.
let a3 = [ -Infinity, // минус бесконечность false, // не число NaN, // не число 2.4e-3, // 0.0024 '', // не число '-1', // не число null, // не число 0, // 0 Number, // не число '1', // не число undefined, // не число 2, // 2 "hello", // не число 3, // 3 Math.E, // 2.7 "hi", // не число 4, // 4 "Mazai", // не число '2e5', // не число Number(1), // 1 0xffff, // 65535 new Number, // 0 true, // не число Infinity, // плюс бесконечность, 23497654337n// не число ]; const a3_res = []; const isNum=v=>'[object Number]' == Object.prototype.toString.call(v) && ! isNaN(v); a3.filter(isNum) .map(v=>+v) .forEach(v=>a3_res.push(v)); a3_res.forEach(v=>console.log(v));
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.21.43541
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.