정규식 유효성 검사의 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.0e10
과 1.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$"
다음은 숫자에 대한 훌륭한 정규식입니다. 쉼표와 소수가있는 숫자를 허용합니다.
/^-?(?:\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
'programing' 카테고리의 다른 글
Google Colab : Google 드라이브에서 데이터를 읽는 방법은 무엇입니까? (0) | 2021.01.16 |
---|---|
Angular 5 클릭 할 때마다 맨 위로 스크롤 (0) | 2021.01.16 |
Django for 루프 템플릿에서 홀수 및 짝수 값을 얻으려면 어떻게해야합니까? (0) | 2021.01.16 |
CryptographicException이 처리되지 않았습니다. 시스템이 지정된 파일을 찾을 수 없습니다. (0) | 2021.01.16 |
iOS 방향 변경 즉시 감지 (0) | 2021.01.16 |