Regex, чтобы проверить, содержит ли строка только числа

hash = window.location.hash.substr(1); var reg = new RegExp('^[0-9]$'); console.log(reg.test(hash)); 

Я "123f" как на "123" и на "123f" . Я хотел бы проверить, содержит ли hash только числа. Я что-то пропустил?

 var reg = /^\d+$/; 

должен это сделать. Оригинал соответствует любому, что состоит из ровно одной цифры.

Как вы сказали, вы хотите, чтобы hash содержал только числа.

 var reg = new RegExp('^[0-9]+$'); 

или

 var reg = new RegExp('^\\d+$'); 

\d и [0-9] означают одно и то же. Используемое значение + означает, что выполняется поиск одного или нескольких событий из [0-9].

Это позволит также для подписанных и плавающих чисел или пустой строки:

 var reg = /^-?\d*\.?\d*$/ 

Если вы не хотите разрешать пустую строку, используйте следующую команду:

 var reg = /^-?\d+\.?\d*$/ 
 var validation = { isEmailAddress:function(str) { var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; return pattern.test(str); // returns a boolean }, isNotEmpty:function (str) { var pattern =/\S+/; return pattern.test(str); // returns a boolean }, isNumber:function(str) { var pattern = /^\d+$/; return pattern.test(str); // returns a boolean }, isSame:function(str1,str2){ return str1 === str2; } }; alert(validation.isNotEmpty("dff")); alert(validation.isNumber(44)); alert(validation.isEmailAddress("[email protected]")); alert(validation.isSame("sf","sf")); 

Это крайний перебор для вашей цели, но вот что я использую:

 var numberReSnippet = "(?:NaN|-?(?:(?:\\d+|\\d*\\.\\d+)(?:[E|e][+|-]?\\d+)?|Infinity))"; var matchOnlyNumberRe = new RegExp("^("+ numberReSnippet + ")$"); 

Насколько мне известно, это соответствует всем вариациям номеров, которые Java и JavaScript будут когда-либо бросать вам, включая «-Infinity», «1e-24» и «NaN». Он также соответствует номерам, которые вы можете ввести, например, «-5».

Как написано, reSnippet предназначен для удаления в другие регулярные выражения, поэтому вы можете извлекать (или избегать) числа. Несмотря на все круглые скобки, он не содержит групп захвата. Таким образом, matchOnlyNumberRe соответствует только строкам, которые являются числами, и имеет группу захвата для всей строки.

Вот тесты Jasmine, поэтому вы можете видеть, что он делает и не обрабатывает:

 describe("Number Regex", function() { var re = new RegExp("^("+ numberReSnippet + ")$"); it("Matches Java and JavaScript numbers", function() { expect(re.test( "1")).toBe(true); expect(re.test( "0.2")).toBe(true); expect(re.test( "0.4E4")).toBe(true); // Java-style expect(re.test( "-55")).toBe(true); expect(re.test( "-0.6")).toBe(true); expect(re.test( "-0.77E77")).toBe(true); expect(re.test( "88E8")).toBe(true); expect(re.test( "NaN")).toBe(true); expect(re.test( "Infinity")).toBe(true); expect(re.test( "-Infinity")).toBe(true); expect(re.test( "1e+24")).toBe(true); // JavaScript-style }); it("Matches fractions with a leading decimal point", function() { expect(re.test( ".3")).toBe(true); expect(re.test( "-.3")).toBe(true); expect(re.test( ".3e-4")).toBe(true); }); it("Doesn't match non-numbers", function() { expect(re.test( ".")).toBe(false); expect(re.test( "9.")).toBe(false); expect(re.test( "")).toBe(false); expect(re.test( "E")).toBe(false); expect(re.test( "e24")).toBe(false); expect(re.test( "1e+24.5")).toBe(false); expect(re.test("-.Infinity")).toBe(false); }); }); 
 ^[0-9]$ 

… является регулярным выражением, соответствующим любой отдельной цифре, поэтому 1 вернет true, но 123 вернет false.

Если вы добавите квантификатор *

 ^[0-9]*$ 

выражение будет соответствовать произвольной длине строк цифр, а 123 вернет true. (123f все равно вернет false).

Имейте в виду, что технически пустая строка представляет собой строку цифр длиной 0 строк, и поэтому она вернет true, используя ^ [0-9] * $ Если вы хотите принимать только строки, содержащие 1 или более цифр, используйте + вместо *

 ^[0-9]+$ 

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

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

Например, это тест, который можно использовать для ввода формы HTML.

Он обходит весь JS-фольклор, например, tipeof (NaN) = число, parseint (‘1 Kg’) = 1, булевы, закодированные в числа, и тому подобное.

Он делает это, передавая аргумент как строку и проверяя эту строку на регулярное выражение, как на @ codename, но разрешая записи типа 5. и .5

 function isANumber( n ) { var numStr = /^-?(\d+\.?\d*)$|(\d*\.?\d+)$/; return numStr.test( n.toString() ); } not numeric: Logger.log( 'isANumber( "aaa" ): ' + isANumber( 'aaa' ) ); Logger.log( 'isANumber( "" ): ' + isANumber( '' ) ); Logger.log( 'isANumber( "lkjh" ): ' + isANumber( 'lkjh' ) ); Logger.log( 'isANumber( 0/0 ): ' + isANumber( 0 / 0 ) ); Logger.log( 'isANumber( 1/0 ): ' + isANumber( 1 / 0 ) ); Logger.log( 'isANumber( "1Kg" ): ' + isANumber( '1Kg' ) ); Logger.log( 'isANumber( "1 Kg" ): ' + isANumber( '1 Kg' ) ); Logger.log( 'isANumber( false ): ' + isANumber( false ) ); Logger.log( 'isANumber( true ): ' + isANumber( true ) ); numeric: Logger.log( 'isANumber( "0" ): ' + isANumber( '0' ) ); Logger.log( 'isANumber( "12.5" ): ' + isANumber( '12.5' ) ); Logger.log( 'isANumber( ".5" ): ' + isANumber( '.5' ) ); Logger.log( 'isANumber( "5." ): ' + isANumber( '5.' ) ); Logger.log( 'isANumber( "-5" ): ' + isANumber( '-5' ) ); Logger.log( 'isANumber( "-5." ): ' + isANumber( '-5.' ) ); Logger.log( 'isANumber( "-.5" ): ' + isANumber( '-5.' ) ); Logger.log( 'isANumber( "1234567890" ): ' + isANumber( '1234567890' )); 

Объяснение регулярного выражения:

 /^-?(\d+\.?\d*)$|(\d*\.?\d+)$/ 

Начальный «^» и окончательный «$» соответствуют началу и концу строки, чтобы гарантировать, что проверка охватывает всю строку. «-?» часть – знак минуса с символом «?» множитель, который допускает нуль или один экземпляр.

Тогда есть две одинаковые группы, ограниченные скобками. Строка должна соответствовать любой из этих групп. Первые совпадающие числа, такие как 5. и вторая .5

Первая группа

 \d+\.?\d* 

«\ D +» соответствует цифре (\ d) один или несколько раз.
«\.?» – это десятичная точка (экранированная «\», чтобы лишить ее магии), ноль или один раз.

Последняя часть «\ d *» снова представляет собой цифру, ноль или более раз.
Все части являются необязательными, но первая цифра, поэтому эта группа соответствует номерам типа 5., а не .5, которые совпадают с другой половиной.

Если вам нужны только положительные целые числа и не нужны ведущие нули (например, «0001234» или «00»):

 var reg = /^(?:[1-9]\d*|\d)$/; 

Вам нужно * чтобы оно говорило «ноль или более предыдущего символа», и это должно сделать это:

 var reg = new RegExp('^\\d*$'); 

Почему бы не использовать что-то вроде:

 $.isNumeric($(input).val()) 

Проверен ли jquery, и проверяется наиболее распространенный случай

Если числа не должны быть абсурдно огромными, возможно, используйте:

 new RegExp( '^' + // No leading content. '[-+]?' + // Optional sign. '(?:[0-9]{0,30}\\.)?' + // Optionally 0-30 decimal digits of mantissa. '[0-9]{1,30}' + // 1-30 decimal digits of integer or fraction. '(?:[Ee][-+]?[1-2]?[0-9])?' + // Optional exponent 0-29 for scientific notation. '$' // No trailing content. ) 

Это пытается избежать некоторых сценариев, на всякий случай:

  • Переполнение любых буферов, к которым может быть передана исходная строка.
  • Медлительность или странности, вызванные денормальными цифрами вроде 1E-323 .
  • Передача Infinity когда ожидается конечное число (попробуйте 1E309 или -1E309 ).

На входе, если вы хотите отфильтровать другие символы и показывать только номера в поле ввода, вы можете заменить значение поля на клавиатуре:

  var yourInput = jQuery('#input-field'); yourInput.keyup(function() { yourInput.val((yourInput.val().replace(/[^\d]/g,''))) }) 

Я вижу, что вы уже получили много ответов, но если вы ищете регулярное выражение, которое может соответствовать целым числам и номерам с плавающей запятой, этот будет работать для вас:

 var reg = /^-?\d*\.?\d+$/; 

Простой JavaScript-редактор Regex

 var cnpj = "12.32.432/1-22".replace(/\D/gm,""); console.log(cnpj); 

* Результат :

 1232432122 

Проверяет только номера:

 if(cnpj.length > 0){ return true; } 

Простой пример

 if("12.32.432/1-22".replace(/\D/gm,"").length > 0){ console.log("Ok."); } 

Вы также можете использовать следующие методы, но знать их внутреннюю реализацию и / или возвращаемые значения.

 1A isNaN(+'13761123123123'); // returns true 1B isNaN(+'13761123123ABC'); // returns false 2A ~~'1.23'; // returns 1 2B ~~'1.2A'; // returns 0 

Для 1A & 1B строка – это первый тип, принудительно используемый с помощью оператора + перед передачей функции isNaN() . Это работает, потому что числовые типы, которые include нечисловые значения, возвращают NaN . Существуют соображения с isNaN()'s реализации isNaN()'s которые описаны здесь . Одно соображение заключается в том, что если логическое значение передано как isNaN(+false|true) , принудительно применяются к их числовым эквивалентам, и, таким образом, возвращается false но можно ожидать, что функция вернет true поскольку логическое значение не является числовым в смысле того, что мы тестируем.

Для 2A и 2B стоит отметить, что для нахождения дополнения к числу требуется, чтобы данное значение находилось в пределах диапазона значений знакового 32-битного целого числа, на которое можно ссылаться в спецификации .

Мои личные предпочтения, хотя можно утверждать, что они менее читаемы, поскольку они include унарный оператор, составляют 1A & 1B из-за скорости и лаконичности.

Perf https://jsperf.com/numeric-string-test-regexvsisnan/1

 /^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/ 

Если вы хотите совместить числа со знаками со знаком, вы можете использовать:

 var reg = new RegExp('^(\-?|\+?)\d*$'); 

Он будет проверять номера формата: +1, -1, 1.

Использовать это:

 const pattern = new RegExp(/^[+-]?\d+(\.\d+)?([Ee][+-]?\d+)?$/g); 

Число только регулярное выражение ( обновлено )

  var reg = new RegExp('[^0-9]','g'); 
 var pattern = /[0-9!"£$%^&*()_+-=]/; 

Это пытается избежать некоторых сценариев, на всякий случай:

Переполнение любых буферов, к которым может быть передана исходная строка. Медлительность или странности, вызванные денормальными цифрами вроде 1E-323 . Передача бесконечности, когда ожидается конечное число (попробуйте 1E309 или -1E309 ).

  • Как вы отлаживаете регулярное выражение?
  • Сильное пароли regex
  • Как извлечь n-е слово и подсчитать вхождения в строку MySQL?
  • Какое регулярное выражение будет соответствовать действующим международным телефонным номерам?
  • Регулярное выражение, которое никогда не будет соответствовать чему-либо
  • Передача параметров в действие с помощью ModelDriven в Struts 2
  • Извлечение полей Jmeter / анализ JSON-ответа
  • Проверка правильности выражения в jQuery
  • Найти и убить процесс в одной строке с помощью bash и regex
  • Регулярное выражение для проверки строковой буквенно-цифровой строки
  • Многострочное регулярное выражение для соответствия конфигурационному блоку
  • Давайте будем гением компьютера.