정밀도가 2 인 소수에 대한 간단한 정규식


271

정밀도가 2 인 10 진수의 정규식은 무엇입니까?

유효한 예 :

123.12
2
56754
92929292929292.12
0.21
3.1

잘못된 예 :

12.1232
2.23332
e666.76

소수점은 선택 사항 일 수 있으며 정수도 포함될 수 있습니다.


1
관련 : 천 단위 구분 기호가있는 10 진수에 대해서는 stackoverflow.com/questions/16148034/…
Yeo

1
가장 좋은 대답은 다음과 같습니다. stackoverflow.com/a/39399503/715269
Gangnus

답변:


397

유효한 정규식 토큰은 구현에 따라 다릅니다. 일반적인 형태는 다음과 같습니다.

[0-9]+(\.[0-9][0-9]?)?

더 컴팩트 한

\d+(\.\d{1,2})?

둘 다 소수점 자리 앞뒤에 적어도 하나의 숫자가 있다고 가정합니다.

전체 문자열이이 형식의 숫자가되도록하려면 표현식을 시작 및 끝 태그 (예 : Perl 형식)로 랩핑하십시오.

^\d+(\.\d{1,2})?$

단일 마침표 ( )의 입력을 제외 하고 소수점 앞자리가없는 숫자 ( .12)와 마침표 ( )가 있는 정수를 일치 시키려면 다음을 시도하십시오.12..

^(\d+(\.\d{0,2})?|\.?\d{1,2})$

추가

분수 부분을 감싸서 ()?선택적으로 만듭니다. 여기에는 다음과 같은 형식이 12. 더 포함되지 않습니다 ^\d+\\.?\d{0,2}$.

추가

사용은 ^\d{1,6}(\.\d{1,2})?$반복을 중지하고 진수 값의 정수 부분에 제한을 줄 수 있습니다.


4
수학적으로, 정밀도 2 숫자는 마지막이 0이더라도 항상 두 개의 소수점을 가져야한다고 생각합니다. 이것은 중요한 수치에 대한 나의 경험을 기반으로하므로 잘못 될 수 있지만 1.7이 1.70인지 또는 1.70에서 1.74 사이의 숫자인지 실제로 알 수는 없습니다.
paxdiablo

감사! 내가 필요한 바로 그 것 :) +1
alex

6
이것은 0001.00와 일치합니다 : /
redben

2
'-?'추가 이 ^ \ d + (\. \ d {1,2})? $ ===> ^-? \ d + (\. \ d {1,2})? $ -ve 지원
Murali Murugesan

1
@BimalDas, 당신과 표현을 접두어로 네거티브를 지원할 수 -?처럼 -?\d+(\.\d{1,2})?. OP의 질문에 포함되지 않았기 때문에 음수를 포함하거나 소수점으로 시작하지 않았습니다. 더 일반적인 숫자 형식에는 확실히 유효합니다. 주석 스레드는 ".21"을 처리하는 몇 가지 방법을 제공합니다.
DocMax

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

그리고 정규 표현식은 읽기가 끔찍하기 때문에 이해하기가 쉽지 않으므로 여기에 자세한 내용이 있습니다.

^                         # Start of string
 [0-9]+                   # Require one or more numbers
       (                  # Begin optional group
        \.                # Point must be escaped or it is treated as "any character"
          [0-9]{1,2}      # One or two numbers
                    )?    # End group--signify that it's optional with "?"
                      $   # End of string

당신은 대체 할 수있는 [0-9]\d(을 포함한 대부분의 정규식 구현에 PCRE 가장 일반적인). [0-9]읽기 쉽다고 생각 되는대로 그대로 두었 습니다.

또한, 내가 그것을 확인하는 데 사용한 간단한 파이썬 스크립트는 다음과 같습니다.

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0

나는 소수점 이하 3 자릿수를 원합니다. 운없이 ^ ([0-9] {0,3}) + (\. [0-9] {1,2})? $
Raghurocks

3
@Raghurocks +첫 번째 닫는 paren 후^([0-9]{0,3})(\.[0-9]{1,2})?$
dbr

Java 사용자의 경우 10 진수를 이스케이프하면 안됩니다.

3
@Gracchus 확실합니까? 아마해야한다 \\.대신 \.때문에 .작동하지만, 모든 문자 (다만 소수 자릿수)과 일치처럼 보일 것입니다. 예를 들어, 모두 1z23하고 1.23당신이 그것을 탈출하지 않으면 유효한 것으로 간주 될 수있다
DBR

@dbr 어쩌면 그게 좋을 것입니다. Java는 부적절한 탈출에 대해 불평했습니다. "고정"을 제거 (종료), lol. 아직 완전히 테스트 할 기회가 없었습니다.

20

선택적 빼기 부호를 포함시키고 015(8 진수로 오인 할 수있는) 숫자를 허용하지 않으려면 다음과 같이 작성하십시오.

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

이것은 나를 위해 소수점 앞에 알파를 허용합니다. X.25
BengalTigger를

1
이것은 소수점 이하 자릿수를 2로 제한하지 않습니다.
Dawood ibn Kareem

13

천 단위 구분 기호가없는 숫자의 경우이 간단한 소형 정규식이 좋습니다.

\d+(\.\d{2})?|\.\d{2}

또는 2의 정밀도로 제한되지 않습니다.

\d+(\.\d*)?|\.\d+

후자 일치
1
100
100
100.74
100.7
0.7
0.7
0.72

그리고 그것은 빈 문자열과 일치하지 않습니다 (\ d *.? \ d *처럼)


7

나는 이것을 소수점 이하 두 자리까지 사용합니다 :
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) 통과 :
.25
0.25
10.25
+0.25

는 통과하지 않습니다 :
-.25
01.25
1.
1.256


이것은 또한 빈 값을 전달합니다.
BengalTigger

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

12.받아 들여지 는 것을 만들 것 입니다. 이것은 일반적으로 받아 들여지는 것이 아니라 만약 "유연성"이 필요한 경우, 한 가지 방법입니다. 물론로 [0-9]바꿀 수는 \d있지만이 방법으로 더 읽기 쉽습니다.



3

주요 답변은 유효 5.하거나 5,입력 하기 때문에 잘못되었습니다

이 코드는 그것을 처리합니다 (그러나 예제에서는 음수가 금지되어 있습니다).

/^[0-9]+([.,][0-9]{1,2})?$/;

결과는 다음과 같습니다.

true => "0"/ true => "0.00"/ true => "0.0"/ true => "0,00"/ true => "0,0"/ true => "1,2"true => "1.1"/ true => "1"/ true => "100"true => "100.00"/ true => "100.0"/ true => "1.11"/ true => "1,11"/ false => "-5"/ false => "-0.00"/ true => "101"/ false => "0.00.0"/ true => "0.000"/ true => "000.25"/ false => ".25" / true => "100.01"/ true => "100.2"/ true => "00"/ false => "5." / false => "6,"/ true => "82"/ true => "81,3"/ true => "



2

일반적으로 무제한 소수점 이하 자릿수 :

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


1

당신은을 할 필요가 없습니다 ee666.76고려?

(e|0-9)\d*\d.\d{1,2)

아니요, 프로젝트 범위를 벗어났습니다! 고마워,하지만 편리합니다 :)
user39221

1

내 답변도 추가하면 누군가가 유용하다고 생각하거나 올바른 것일 수도 있습니다.

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));

1

이것은 나와 함께 일했다 :

(-?[0-9]+(\.[0-9]+)?)

그룹 1 은 실수이고 그룹 2 는 분수입니다.


1

내 프로젝트로 시도했습니다. 이렇게하면 + | -부호가있는 숫자도 허용됩니다 .

/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/

0

Chrome 56은 유형 번호와 함께 이러한 종류의 패턴을 허용하지 않습니다 (Chrome 56은 11.11. 추가.). 유형을 텍스트로 진행합니다.


0

이것은 지수와 최대 2 자리의 십진수를 허용합니다.

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

데모


정수와 일치하지 않습니다1.2e-10
Toto

네, 고마워요 나는 소수에 대해서만 생각했습니다
Nambi_0915

([0-9]+)?더 잘 작성 \d*됩니다. 이제는 일치하지 않습니다 10e3. 그리고 OP는 최대 2 자리까지 일치 시키려고합니다.
Toto

-1
 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }

이 함수는 10 진수 숫자의 유효성을 검사합니다. 날씨 숫자는 소수점 이하 자릿수를 갖습니다. 그렇지 않으면 "오른쪽 숫자"라고 표시됩니다. 경고 메시지가 나타납니다.

감사... :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.