programing

정규식 유효성 검사의 10 진수 또는 숫자 값

procenter 2021. 1. 16. 10:41
반응형

정규식 유효성 검사의 10 진수 또는 숫자 값


정규식 유효성 검사를 사용하여 십진수 값 또는 숫자 값만 확인하려고합니다. 하지만 사용자가 숫자 값을 입력하면 첫 번째 숫자 "0"이 아닙니다.

어떻게하나요?


1-9 범위의 숫자와 0 개 이상의 다른 숫자 :

^[1-9]\d*$

선택적 소수점 뒤에 숫자가있는 숫자를 허용합니다. 1-9 범위의 숫자 뒤에 0 개 이상의 다른 숫자가 이어지고 선택적으로 소수점 뒤에 1 개 이상의 숫자가 오는 경우 :

^[1-9]\d*(\.\d+)?$

메모:

  • 시작과 끝 ^$앵커는 기본적으로 전체 문자열이 패턴과 일치해야 함을 나타냅니다.

  • ()? 대괄호 사이의 모든 것 중 0 또는 1과 일치

쉼표 처리를위한 업데이트 :

정규 표현식 .에는 특별한 의미가 있습니다. 단일 문자와 일치합니다. 말 그대로 일치 시키려면 .문자열에 당신이 할 필요가 탈출. 사용 \.이것은의 의미 \.위의 정규 표현식이다. 따라서 대신 쉼표를 사용하려는 경우 패턴은 다음과 같습니다.

^[1-9]\d*(,\d+)?$

쉼표 및 마침표 처리를위한 추가 업데이트

당신은 할 수 있도록합니다 . 숫자의 그룹과 사이에 , 사이 적분과 소수 부분 다음 시도 :

^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$

즉, 1-9 범위의 숫자와 최대 2 개의 다른 숫자, 0 개 이상의 마침표 그룹, 3 자리 숫자, 선택적으로 이전과 같이 쉼표와 숫자입니다.

당신은 할 수 있도록합니다 . 숫자 사이에 다음을 시도하십시오.

^[1-9][\.\d]*(,\d+)?$

즉, 숫자 1-9 다음에 0 개 이상의 숫자 또는 마침표가 선택적으로 뒤에 쉼표와 하나 이상의 숫자가 이어집니다.


실제로 주어진 답변 중 어느 것도 요청을 완전히 포함하지 않습니다.
OP는 특정 사용 사례 또는 숫자 유형을 제공하지 않았으므로 가능한 모든 사례와 순열을 다루려고 노력할 것입니다.

일반 번호

전체 긍정

이 숫자는 일반적으로 unsigned integer 라고 부르지 만 0을 포함하는 양의 비 분수 숫자라고 부를 수도 있습니다. 여기에는 0, 1같은 숫자가 포함됩니다 99999.
이 유효성 검사를 다루는 정규식은 다음과 같습니다.

/^(0|[1-9]\d*)$/

이 정규식 테스트

전체 긍정 및 부정

이 숫자를 일반적으로 부호있는 정수 라고 하지만 분수가 아닌 숫자라고도합니다. 이 같은 번호를 포함 0, 1, 99999, -99999, -1-0.
이 유효성 검사를 다루는 정규식은 다음과 같습니다.

/^-?(0|[1-9]\d*)$/

이 정규식 테스트

아시다시피 -0유효한 번호 도 포함 시켰습니다 . 그러나 일부는이 사용법에 대해 논쟁 할 수 있으며 이것이 실수가 아니라고 말할 수 있습니다 ( 여기에서 Signed Zero에 대해 자세히 읽을 수 있음 ). 따라서이 정규식에서이 숫자를 제외하려면 다음을 대신 사용해야합니다.

/^-?(0|[1-9]\d*)(?<!-0)$/

이 정규식 테스트

내가 추가 한 것은 이 주장 앞에 (?<!-0)포함하지 않는다는 의미 -0입니다. (?<!...)어설 션은 네거티브 lookbehind 라고 하는데, 이는 ...이 어설 션 앞에를 대체하는 문구 가 나타나지 않아야 함을 의미합니다 . Lookbehind에는 문구에 수량자를 포함 할 수없는 것과 같은 제한이 있습니다. 그렇기 때문에 어떤 경우에는 대신 Lookahead를 사용할 것입니다. 이는 동일하지만 반대의 방식입니다.

Perl 및 Python에서 사용하는 것을 포함하여 많은 정규식 버전은 고정 길이 문자열 만 허용합니다. 리터럴 텍스트, 문자 이스케이프, 이외의 유니 코드 이스케이프 \X및 문자 클래스를 사용할 수 있습니다 . 수량 자 또는 역 참조를 사용할 수 없습니다. 대체를 사용할 수 있지만 모든 대체의 길이가 같은 경우에만 가능합니다. 이러한 특징은 먼저 lookbehind가 필요로하는만큼 많은 문자에 대해 제목 문자열을 뒤로 한 다음 왼쪽에서 오른쪽으로 lookbehind 내부의 정규식을 시도하여 lookbehind를 평가합니다.

여기에서 Lookaround 단언에 대한 자세한 내용을 읽을 수 있습니다 .

분수

이 숫자는 일반적으로 unsigned float 또는 unsigned double 이라고 부르지 만 0을 포함하여 양의 분수라고 부를 수도 있습니다. 이 같은 번호를 포함 0, 1, 0.0, 0.1, 1.0, 99999.000001, 5.10.
이 유효성 검사를 다루는 정규식은 다음과 같습니다.

/^(0|[1-9]\d*)(\.\d+)?$/

이 정규식 테스트

일부는 번호가 같은 것을 말할 수 있습니다 .1, .0그리고 .00651(동일을 0.1, 0.0그리고 0.00651각각)도 유효 분수, 그리고 나는 그들에 동의 할 수 없다. 따라서 다음은이 형식을 추가로 지원하는 정규식입니다.

/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/

이 정규식 테스트

부정적 및 긍정적

이 숫자는 일반적으로 signed float 또는 signed double 이라고 부르지 만 분수라고 부를 수도 있습니다. 이 같은 번호를 포함 0, 1, 0.0, 0.1, 1.0, 99999.000001, 5.10, -0, -1, -0.0, -0.1, -99999.000001, 5.10.
이 유효성 검사를 다루는 정규식은 다음과 같습니다.

/^-?(0|[1-9]\d*)(\.\d+)?$/

이 정규식 테스트

비의 경우 -0신자 :

/^(?!-0(\.0+)?$)-?(0|[1-9]\d*)(\.\d+)?$/

이 정규식 테스트

또한 눈에 보이지 않는 제로 표현 지원하려는 사람들을 위해, 같은 .1, -.1다음 정규식을 사용합니다 :

/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/

이 정규식 테스트

-0비신자와 보이지 않는 제로 신자 의 조합은 다음 정규식을 사용합니다.

/^(?!-0?(\.0+)?$)-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/

이 정규식 테스트

과학적 표기법 (일명 지수 표기법)이있는 숫자

일부는 검증에서 과학적 문자가있는 숫자를 지원하고 싶을 e수 있습니다. 그건 그렇고, 절대적으로 유효한 숫자이며, 짧은 시간에 매우 긴 숫자를 나타 내기 위해 생성됩니다. 여기에서 과학적 표기법에 대해 자세히 알아볼 수 있습니다 . 이 번호는 일반적으로 같은 모양이다 1e3(인 1000) 1e-3(0.001이다) 완전히 많은 주요 프로그래밍 언어 (예 : JavaScript)를 지원합니다. 표현식이를 '1e3'==1000반환 하는지 확인하여 테스트 할 수 있습니다 true.
과학적 표기법이있는 숫자를 포함하여 위의 모든 섹션에 대한 지원을 나눌 것입니다.

일반 번호

전체 양수 정규식 검증, 지원 번호는 좋아 6e4, 16e-10, 0e0뿐만 아니라 일반 숫자처럼 0, 11:

/^(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

전체 포지티브 및 네거티브 번호 정규식 유효성 검사, 등의 지원 번호 -6e4, -16e-10, -0e0뿐만 아니라 일반 번호와 같은 -0, -11모든 전체 양수 위 :

/^-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

전체 양의 비에 대한 음수 정규식 유효성 검사 -0위와 같은 신자,이 같은 번호를 금지 다만 이제는 -0, -0e0, -0e5-0e-6:

/^(?!-0)-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

분수

양수 정규식 유효성 검사도 지원 위의 정수, 플러스 번호와 같은 0.1e3, 56.0e-3, 0.0e101.010e0:

/^(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

보이지 않는 0이있는 양수는 정규식 유효성 검사를 지원 .1e3하고 .0e0,, .0e-5같은 숫자 외에도 위의 양수도 지원합니다 .1e-7.

/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

음수와 양수의 정규식 유효성 검사, 위의 양수를 지원뿐만 아니라 번호와 같은 -0e3, -0.1e0, -56.0e-3-0.0e10:

/^-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

음수와 양수 정규식 유효성 검사를 이리저리 비 -0신자는, 위와 같은, 그것은 같은 번호를 금지 다만 이제는 -0, -0.00000, -0.0e0, -0.00000e5-0e-6:

/^(?!-0(\.0+)?(e|$))-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

눈에 보이지 않는 영 지원 정규식 검증, 지원도 위의 양수와 음수, 추가 숫자 등으로 음과 양의 수 -.1e3, -.0e0, -.0e-5-.1e-7:

/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

-0위와 동일하지만 비신자와 보이지 않는 제로 신자 의 조합이있는 음수와 양수 -.0e0, -.0000e15같은 숫자를 금지합니다 -.0e-19.

/^(?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i

이 정규식 테스트

16 진수 표현이있는 숫자

많은 프로그래밍 언어에서 16 진수와 같은 문자열 표현은 0x4F7A쉽게 10 진수로 변환 될 수 있습니다 20346.
따라서 유효성 검사 스크립트에서이를 지원할 수 있습니다.
다음 정규식은 16 진수 표현 만 지원합니다.

/^0x[0-9a-f]+$/i

이 정규식 테스트

모든 순열

이러한 최종 정규식은 보이지 않는 0 숫자를 지원합니다.

서명 된 제로 신자

/^(-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i

이 정규식 테스트

서명되지 않은 제로 신자

/^((?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i

이 정규식 테스트

많은 프로그래밍 언어에서 지원되는 모든 숫자 순열을 다루었기를 바랍니다.
행운을 빕니다!


아, 언급하는 것을 잊었습니다. 숫자를 확인하려는 사람들은 천 단위 구분 기호를 포함합니다. ,먼저 모든 쉼표 ( )를 정리해야 합니다. 어떤 유형의 구분 기호도있을 수 있으므로 실제로 모두 다룰 수는 없습니다.
그러나 번호 확인 전에 먼저 제거 할 수 있습니다.

//JavaScript
function clearSeparators(number)
{
    return number.replace(/,/g,'');
}

내 블로그에 비슷한 게시물 .


나는 같은 문제가 있었지만 ".25"가 유효한 십진수가되기를 원했습니다. JavaScript를 사용하는 솔루션은 다음과 같습니다.

function isNumber(v) {
  // [0-9]* Zero or more digits between 0 and 9  (This allows .25 to be considered valid.)
  // ()? Matches 0 or 1 things in the parentheses.  (Allows for an optional decimal point)
  // Decimal point escaped with \.
  // If a decimal point does exist, it must be followed by 1 or more digits [0-9]
  // \d and [0-9] are equivalent 
  // ^ and $ anchor the endpoints so tthe whole string must match.
  return v.trim().length > 0 && v.trim().match(/^[0-9]*(\.[0-9]+)?$/);
}

내 trim () 메서드는

String.prototype.trim = function() {
  return this.replace(/(^\s*|\s*$)/g, "");
};

매튜 데스 보뉴


주어진 모든 정규식을 테스트했지만 불행히도 그중 어느 것도 해당 테스트를 통과하지 못했습니다.

    String []goodNums={"3","-3","0","0.0","1.0","0.1"};
    String []badNums={"001","-00.2",".3","3.","a",""," ","-"," -1","--1","-.1","-0", "2..3", "2-", "2...3", "2.4.3", "5-6-7"};

이 모든 테스트를 통과 한 내가 쓴 최고는 다음과 같습니다.

"^(-?0[.]\\d+)$|^(-?[1-9]+\\d*([.]\\d+)?)$|^0$"

enter image description here


다음은 숫자에 대한 훌륭한 정규식입니다. 쉼표와 소수가있는 숫자를 허용합니다.

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/

번호 확인을위한 정규식은 다음과 같습니다.

^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$

유효한 숫자 :

String []validNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

잘못된 번호 :

String []invalidNumbers={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

이 코드를 시도해보십시오. 도움이 되길 바랍니다.

String regex = "(\\d+)(\\.)?(\\d+)?";  for integer and decimal like 232 232.12 

/([0-9]+[.,]*)+/ matches any number with or without coma or dots

it can match

         122
         122,354
         122.88
         112,262,123.7678

bug: it also matches 262.4377,3883 ( but it doesn't matter parctically)


if you need to validate decimal with dots, commas, positives and negatives try this:

Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);

Good luck.


Below is the perfect one for mentioned requirement :

^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$

ReferenceURL : https://stackoverflow.com/questions/2811031/decimal-or-numeric-values-in-regular-expression-validation

반응형