programing

문자열에 숫자만 포함되어 있는지 여부를 확인하는 정규식

kingscode 2022. 9. 27. 21:34
반응형

문자열에 숫자만 포함되어 있는지 여부를 확인하는 정규식

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

"123" ★★★★★★★★★★★★★★★★★」"123f"해시에 숫자만 포함되어 있는지 확인하고 싶습니다.가가뭔 ?가 ?? ????

var reg = /^\d+$/;

할 수 있을 거예요.원본은 정확히 한 자리 숫자로 구성된 모든 것과 일치합니다.

말씀하신 바와 같이 해시는 숫자만 포함해야 합니다.

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

또는

const 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+\.?\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("mf@tl.ff"));
alert(validation.isSame("sf","sf"));
^[0-9]$ 

...는 임의의 1자리 숫자와 일치하는 정규 표현이므로 1은 true를 반환하지만 123은 false를 반환합니다.

* 수량자를 추가하면

^[0-9]*$

식은 임의의 길이의 자릿수 문자열과 일치하며 123은 true를 반환합니다(123f는 여전히 false를 반환합니다).

빈 문자열은 0자리 숫자 문자열이므로 ^[0-9]*$를 사용하여 true를 반환합니다.하나 이상의 숫자를 포함하는 문자열만 허용하려면 * 대신 +를 사용하십시오.

^[0-9]+$

다른 많은 사람들이 지적했듯이, 이것을 실현하는 방법은 여러 가지가 있지만, 원래의 질문의 코드는 의도한 대로 작동하기 위해 하나의 추가 문자만을 필요로 한다는 것을 지적하는 것이 적절하다고 생각했다.

이것은 당신의 목적에 대한 극단적인 과잉 살상입니다.

const numberReSnippet = "NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)";
const matchOnlyNumberRe = new RegExp("^("+ numberReSnippet + ")$");

제가 아는 바로는 "-Infinity", "1e-24", "NaN" 등 Java와 JavaScript가 사용자에게 던지는 숫자의 모든 변형과 일치합니다.또한 "-.5"와 같이 입력할 수 있는 숫자와 일치합니다.

된 바와 같이, 있는 as as as 。numberReSnippet는 다른 되어 있기 추출 회피 수 .모든 괄호에도 불구하고 캡처 그룹은 포함되어 있지 않습니다.따라서 "match Only NumberRe"는 숫자 문자열만 일치하며 문자열 전체에 대한 캡처 그룹이 있습니다.

다음은 Jasmine 테스트입니다.이 테스트에 의해 처리되는 기능과 처리하지 않는 기능을 확인할 수 있습니다.

describe("Number Regex", function() {
    const re = matchOnlyNumberRe;
    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);
        expect(re.test(      "8|24")).toBe(false);
    });
});

\d는 소수점과 일치하지 않습니다.소수점에는 다음을 사용합니다.

const re = /^\d*(\.\d+)?$/
'123'.match(re)       // true
'123.3'.match(re)     // true
'123!3'.match(re)     // false

이 함수는 통상적인 번호 검출 기능이 동작할 것으로 예상하기 때문에, 그 입력이 전통적인 의미에서의 숫자인지 아닌지를 확인합니다.

예를 들어 HTML 양식 입력에 사용할 수 있는 테스트입니다.

티프프(NaN) = 수, 파싱트(parseint('1Kg') = 1, 부엘(bohan)이 숫자로 강제되는 등의 JS 민속을 모두 우회한다.

인수를 문자열로 렌더링하고 해당 문자열을 @codename-과 같은 정규식에 대해 체크하지만 5.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+)$/  

첫 번째 "^"과 마지막 "$"는 문자열의 시작과 끝과 일치하여 문자열 전체에 걸쳐 체크가 수행되도록 합니다."?" 부분은 0 또는 하나의 인스턴스를 허용하는 "?" 승수가 있는 빼기 기호입니다.

다음으로 괄호로 구분된 두 개의 유사한 그룹이 있습니다.문자열은 이러한 그룹 중 하나와 일치해야 합니다.첫 번째 숫자는 5와 같은 숫자와 일치하고 두 번째 숫자는 0.5입니다.

첫 번째 그룹은

\d+\.?\d*

'\d+'는 '\d+'라고 합니다.
'\'이 ?이 없는 ), 0 "는 소수점("\"를 사용하여 마법이 사라짐), 0 또는 1회입니다.

마지막 부분 "\d*"는 다시 숫자입니다. 0회 이상입니다.
첫 번째 자리만 제외하고 모든 부품이 옵션이기 때문에 이 그룹은 나머지 절반과 일치하는 .5가 아니라 5.와 같은 숫자와 일치합니다.

양의 정수만 필요하고 선행 0이 필요하지 않은 경우(예: "0001234" 또는 "00"):

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

수치가 터무니없이 크지 않을 경우 다음을 사용할 수 있습니다.

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.
)

이것은, 다음의 경우에 대비해, 몇개의 시나리오를 회피하려고 합니다.

  • 원래 문자열이 전달될 수 있는 버퍼 오버플로우.
  • 예: sl 、 음 、 음 、 음 、 ities 、 ities 、 ities 、 ities 、 ities 、 ities 、 ities 、 ities 。1E-323.
  • ★★Infinity(try "try "try " (try " " "try "try" (try "try ")1E309 ★★★★★★★★★★★★★★★★★」-1E309를 참조해 주세요.

다음과 같은 것을 사용해 보는 것은 어떨까요?

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

jquery가 테스트되고 가장 일반적인 케이스가 체크됩니다.

★★★★★★★★★★★★★★★★가 필요합니다.* ' '앞글자의 0 이상'이라고 써있으면 .

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

단순 Regex javascript

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

* 결과:

1232432122

숫자만 확인합니다.

if(rCnpj === cnpj){
   return true;
}

간단한 예

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

효과가 있을지도 모릅니다.

let a = "1234"
parseInt(a) == a // true
let b = "1234abc"
parseInt(b) == b // false

다음 방법을 사용할 수도 있지만 내부 구현 및/또는 반환 값에 유의하십시오.

1A isNaN(+'13761123123123'); // returns true
1B isNaN(+'13761123123ABC'); // returns false

2A ~~'1.23'; // returns 1
2B ~~'1.2A'; // returns 0

및 의 경우 은 1A 1 1B 음음음음음음음음음음음음 coer coer coer coer coer coer coer coer coer coer coer the the the the the the를 하여 첫 됩니다.+에 전달되기 전의 연산자isNaN()기능.이는 숫자가 아닌 값을 포함하는 숫자 유형이 반환되기 때문에 작동합니다.NaN에 관한 고려사항이 있습니다.isNaN()'s구현에 대한 자세한 내용은 여기에 기재되어 있습니다.하나의 고려사항은 부울값이 다음과 같이 전달되는 경우입니다.isNaN(+false|true)수치적 등가물에 의해 강요당하기 때문에false반환되지만 함수가 반환될 것으로 예상할 수 있습니다.true부울 값은 우리가 테스트하는 의미에서는 숫자가 아니기 때문입니다.

2A 및 2B의 경우 해당 숫자의 보수를 찾으려면 해당 값이 규격에서 참조할 수 있는 부호 있는 32비트 정수 범위 내에 있어야 합니다.

단항 연산자를 포함하고 있기 때문에 가독성이 떨어진다고 할 수 있지만, 속도와 간결성 때문에 1A와 1B를 개인적으로 선호합니다.

https://jsperf.com/numeric-string-test-regexvsisnan/1 를 참조해 주세요.

이미 많은 답변을 얻었지만 정수와 부동소수점 숫자와 일치할 수 있는 정규 표현을 찾고 있다면 다음과 같이 하십시오.

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

입력 시 다른 문자를 필터링하여 입력 필드에 숫자만 표시하는 경우 키업 시 필드 값을 대체할 수 있습니다.

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

숫자를 부호 있는 값과 일치시키는 경우는, 다음을 사용할 수 있습니다.

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

형식 번호(+1, -1, 1)가 검증됩니다.

var pattern = /[0-9!"£$%^&*()_+-=]/;

이것은, 다음의 경우에 대비해, 몇개의 시나리오를 회피하려고 합니다.

원래 문자열이 전달될 수 있는 버퍼 오버플로우.느린 속도 또는 이상성은 다음과 같은 정규 수치로 인해 발생합니다.1E-323. 유한수가 예상될 때 Infinity 통과(시도)1E309또는-1E309).

번호만 정규식(갱신)

 var reg = new RegExp('[^0-9]','g');

언급URL : https://stackoverflow.com/questions/9011524/regex-to-check-whether-a-string-contains-only-numbers

반응형