Regex с использованием javascript для возврата только числа
Если бы у меня была строка типа “что-то12” или “что-то 102”, как бы я использовал регулярное выражение в javascript, чтобы вернуть только части числа?
var numberPattern = /\d+/g; 'something102asdfkj1948948'.match( numberPattern )
Это вернет объект с двумя элементами внутри “102” и “1948948”. Действуйте по своему усмотрению. Если он не соответствует ни одному, он вернет null.
Предполагая, что вы не имеете дело со сложными десятичными знаками, этого должно быть достаточно.
Вы также можете удалить все нецифровые символы ( \D или [^0-9] ):
let word_With_Numbers = 'abc123c def4567hij89' let word_Without_Numbers = word_With_Numbers.replace(/\D/g, ''); console.log(word_Without_Numbers)
Для числа с десятичной дробью и знаком минус я использую этот фрагмент:
var NUMERIC_REGEXP = /[-][\d]*[\.][\d]+/g; '2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP) // return ["2.2", "3.1", "4", "-7.6"]
Обновление: – 9/9/2018
Нашел инструмент, позволяющий визуально редактировать регулярные выражения: JavaScript Regular Expression Parser & Visualizer.
Вот еще один, с помощью которого вы можете даже отладчик регулярных выражений: онлайн тестер регулярных выражений и отладчик.
Regexper и Regex Pal.
Если вам нужны только цифры:
var value = '675-805-714'; var numberPattern = /\d+/g; value = value.match( numberPattern ).join([]); alert(value); //Show: 675805714
Теперь вы получаете цифры, соединенные
Я думаю, вы хотите получить число из строки. В этом случае вы можете использовать следующее:
// Returns an array of numbers located in the string function get_numbers(input) < return input.match(/7+/g); >var first_test = get_numbers('something102'); var second_test = get_numbers('something102or12'); var third_test = get_numbers('no numbers here!'); alert(first_test); // [102] alert(second_test); // [102,12] alert(third_test); // null
Ответы не соответствуют вашему вопросу, что подразумевает конечное число. Кроме того, помните, что вы возвращаете строку; если вам действительно нужен номер, введите результат:
item=item.replace('^.*\D(\d*)$', '$1'); if (!/^\d+$/.test(item)) throw 'parse error: number not found'; item=Number(item);
Если вы имеете дело с числовыми идентификаторами элементов на веб-странице, ваш код также может с пользой принять Element , извлекая номер из его id (или его первого родителя с id ); если у вас есть Event , вы также можете получить Element от этого.
var result = input.match(/\d+/g).join([])
IMO ответ № 3 в этот раз от Chen Dachao – правильный путь, если вы хотите захватить любое число, но регулярное выражение можно сократить с:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
Я вырезал пример линейного градиента MDN, так что он полностью тестирует регулярное выражение и не нуждается в прокрутке здесь. Я думаю, что я включил все возможности с точки зрения отрицательных чисел, десятичных знаков, единичных суффиксов, таких как deg и%, непоследовательного использования запятой и пробела, а также дополнительных символов точки/точки и дефиса/тире в тексте “lin-grad.ient “. Пожалуйста, дайте мне знать, если я что-то упустил. Единственное, что я вижу, что он не обрабатывает, это неправильно сформированное десятичное число, например, “0,8”.
Если вам действительно нужен массив чисел, вы можете преобразовать весь массив в одну строку кода:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Мой конкретный код, который выполняет синтаксический анализ функций CSS, не должен беспокоиться о нечисловом использовании символа точки/точки, поэтому регулярное выражение может быть еще проще:
var result = input.match(/\d+/g).join([])
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'
Как проверить, что строка состоит исключительно из цифр?
Как проверить что в строке все цифры, и вернуть false если в строке не все цифры?
const numberValidator = (val) => < let Reg = new RegExp("/^\d+$/"); return Reg.test(val); >;
Простой 14 комментариев
var num = prompt(''); // ввод числа alert(testNum(num)); // true — только цифры, false — нет function testNum(num) < if (isNaN(+num)) < return false >else < return true >> alert(typeof num) // num остался строкой
Артём Кан, строка из цифр- не то же самое, что число Javascript.
isNaN(«1.1»)
А уже тем более, приведение типов в JS, там очень много приколов
https://developer.mozilla.org/ru/docs/Web/JavaScri.
var num = prompt(''); alert(testNum(num)) function testNum(num)
alert выведет true только, если в num цифры и/или точка/- (123 , .0 , 123. ). (просто точка/минус — false)
Да, если точку и минус нужно гнать, то функция не катит.
Артём Кан, еще раз, нужно смотреть на задачу, в общем случае, строка из цифр абсолютно не является числом в JavaScript.
Виталий Архипов, Я вот что вспомнил. А что если сделать еще проверку переменной num на отрицательность и целостность? Как Вы считаете?
Артём Кан, если вы проверите, является ли строка целым неотрицательным числом, то получите проверку «Является ли строка натуральным числом».
Артём Кан, математически это верно, на практике в JS есть свои подводные камни, как я вам показал на примере с isNaN, особенно с приведением типов, переполнением и т.д.
9007199254740991 + 2 === 9007199254740991 + 1
Для задачи, определить состоит ли строка из цифр, самое правильно использовать регулярное выражение. Приведение строки в число JS — отдельная история.
Виталий Архипов, я не отрицаю, что на практике, конечно, лучше не использоваться этот способ, так как придется делать множество проверок. Но чисто интересно можно ли проверить так.
Regex, используя JavaScript, чтобы вернуть только цифры
Если бы у меня была строка типа «что-то12» или «что-то 102», как бы я использовал регулярное выражение в javascript, чтобы вернуть только части числа?
8 ответов
var numberPattern = /\d+/g; 'something102asdfkj1948948'.match( numberPattern )
Это вернет объект с двумя элементами внутри «102» и «1948948». Действуйте по своему усмотрению. Если он не соответствует ни одному, он вернет null. Предполагая, что вы не имеете дело со сложными десятичными знаками, этого должно быть достаточно.
paseInt или что выше. Я попробовал оба, оба вывести одно и то же. Обновите NVM, я использовал его для удаления px из «34px». и именно там работает только parseint, где все цифры — первые буквы.
@ meder Вроде. Arrays наследуются от Objects . Для начала порядок элементов Array гарантирован, порядок Object — нет. Кроме того, Arrays имеют дополнительный объект в своей цепочке прототипов, Array.prototype , который содержит такие методы, как .join() . Что-то вроде следующего вызовет ошибку .join и вернет .length как неопределенное: var pattern = /\d+/g; var string = ‘something102asdfkj1948948’; var result = string.match( pattern ); result.join(»); result.length;
@MuhammadUmer, @meder: вам двоим следует объединить усилия: parseInt(‘987d98sf79s7f9s8f9sf’.match(/\d+/gi).join(»))
Чтобы проверить наличие негативов (например, blah blah -42 hello должен вернуть -42 ), используйте numberPattern = /(\d+|-)/g; затем используйте join
Вы также можете удалить все нецифровые символы ( \D или [^0-9] ):
let word_With_Numbers = 'abc123c def4567hij89' let word_Without_Numbers = word_With_Numbers.replace(/\D/g, ''); console.log(word_Without_Numbers)
Для числа с десятичной дробью и знаком минус я использую этот фрагмент:
var NUMERIC_REGEXP = /[-][\d]*[\.][\d]+/g; '2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP) // return ["2.2", "3.1", "4", "-7.6"]
Обновление: — 9/9/2018
Нашел инструмент, позволяющий визуально редактировать регулярные выражения: JavaScript Regular Expression Parser & Visualizer.
Вот еще один, с помощью которого вы можете даже отладчик регулярных выражений: онлайн тестер регулярных выражений и отладчик.
Regexper и Regex Pal.
похоже, что это будет соответствовать вещам как 0.0.0. Попробуйте переместить. вне скобки, как это [-] <0,1>[\ d] * [\.] <0,1>[\ d] +0,1>
Если вам нужны только цифры:
var value = '675-805-714'; var numberPattern = /\d+/g; value = value.match( numberPattern ).join([]); alert(value); //Show: 675805714
Теперь вы получаете цифры, соединенные
Я думаю, вы хотите получить число из строки. В этом случае вы можете использовать следующее:
// Returns an array of numbers located in the string function get_numbers(input) < return input.match(/9+/g); >var first_test = get_numbers('something102'); var second_test = get_numbers('something102or12'); var third_test = get_numbers('no numbers here!'); alert(first_test); // [102] alert(second_test); // [102,12] alert(third_test); // null
Просто чтобы прояснить это, get_numbers/1 возвращает массив строк, а не число. Для вашего примера он вернет: * [«102»] * [«102», «12»] * null
var result = input.match(/\d+/g).join([])
Ответы не соответствуют вашему вопросу, что подразумевает конечное число. Кроме того, помните, что вы возвращаете строку; если вам действительно нужен номер, введите результат:
item=item.replace('^.*\D(\d*)$', '$1'); if (!/^\d+$/.test(item)) throw 'parse error: number not found'; item=Number(item);
Если вы имеете дело с числовыми идентификаторами элементов на веб-странице, ваш код также может с пользой принять Element , извлекая номер из его id (или его первого родителя с id ); если у вас есть Event , вы также можете получить Element от этого.
IMO ответ № 3 в этот раз от Chen Dachao — правильный путь, если вы хотите захватить любое число, но регулярное выражение можно сократить с:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
Я вырезал пример линейного градиента MDN, так что он полностью тестирует регулярное выражение и не нуждается в прокрутке здесь. Я думаю, что я включил все возможности с точки зрения отрицательных чисел, десятичных знаков, единичных суффиксов, таких как deg и%, непоследовательного использования запятой и пробела, а также дополнительных символов точки/точки и дефиса/тире в тексте «lin-grad.ient «. Пожалуйста, дайте мне знать, если я что-то упустил. Единственное, что я вижу, что он не обрабатывает, это неправильно сформированное десятичное число, например, «0,8».
Если вам действительно нужен массив чисел, вы можете преобразовать весь массив в одну строку кода:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Мой конкретный код, который выполняет синтаксический анализ функций CSS, не должен беспокоиться о нечисловом использовании символа точки/точки, поэтому регулярное выражение может быть еще проще: