답변:
다음을 사용하십시오.
/^\d*\.?\d*$/
^
-줄의 시작;\d*
-0 개 이상의 숫자;\.?
-선택적 점 (정규식에서는 .
특수 문자 이므로 이스케이프 됨 )\d*
-0 개 이상의 숫자 (소수점)$
-줄 끝.이것은 0.5와 같은 선행 0을 요구하는 대신 .5 십진수를 허용합니다.
/^\d*\.?\d+$/
소수점 뒤에 숫자를 강제하는 것입니다.
/\d+\.?\d*/
하나 이상의 숫자 ( \d+
), 선택적 마침표 ( \.?
), 0 개 이상의 숫자 ( \d*
).
사용 또는 정규식 엔진에 따라 시작 / 끝 줄 앵커를 추가해야 할 수 있습니다.
/^\d+\.?\d*$/
.
. 그리고 빈 문자열 과 모두 일치 합니다.
-
.
올바르게 수행하려면 다음과 같은 정규식이 필요합니다.
/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/
확장 된 수정자를 사용하는 공백이있는 동일한 표현식 (Perl에서 지원됨) :
/^ [+-]? ( (\d+ (\.\d*)?) | (\.\d+) ) $/x
또는 의견 :
/^ # Beginning of string
[+-]? # Optional plus or minus character
( # Followed by either:
( # Start of first option
\d+ # One or more digits
(\.\d*)? # Optionally followed by: one decimal point and zero or more digits
) # End of first option
| # or
(\.\d+) # One decimal point followed by one or more digits
) # End of grouping of the OR options
$ # End of string (i.e. no extra characters remaining)
/x # Extended modifier (allows whitespace & comments in regular expression)
예를 들어 다음과 일치합니다.
그리고 다음이 아닌 숫자를 거부합니다.
더 간단한 솔루션은 유효한 숫자를 잘못 거부하거나 이러한 숫자가 아닌 것과 일치시킬 수 있습니다.
^A?(B|C)$
. 이전에는 ^A?B|C$
실제로 (^A?B)|(C$)
잘못된 것을 의미 하는 것처럼 작성 되었습니다. 참고 : ^(A?B|C)$
실제로 ^((A?B)|(C))$
"+.5"와 일치하지 않음을 의미하기 때문에 또한 올바르지 않습니다 .
이 정규식을 시도하십시오.
\d+\.?\d*
\ d + 숫자 (선택적 십진수 앞자리)
.? 선택적 소수 (? 한정자로 인해 선택적)
\ d * 소수 이후 선택적 숫자
123.
나는 다음을 사용하게되었다.
^\d*\.?\d+$
이로 인해 다음이 무효화됩니다.
.
3.
.3
이것이 내가 한 일입니다. 위의 어느 것보다 더 엄격하고 일부보다 더 정확합니다.
^0$|^[1-9]\d*$|^\.\d+$|^0\.\d*$|^[1-9]\d*\.\d*$
통과하는 문자열 :
0
0.
1
123
123.
123.4
.0
.0123
.123
0.123
1.234
12.34
실패한 문자열 :
.
00000
01
.0.
..
00.123
02.134
^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$
사람들이 일반적으로 잘 구성된 십진수로 생각하는 것을 반영해야합니다.
소수점 앞의 자릿수는 단일 자릿수 일 수 있으며,이 경우 0에서 9까지 일 수 있으며 두 자릿 이상일 수 있으며이 경우 0으로 시작할 수 없습니다.
소수점 앞에 숫자가 있으면 소수점과 그 뒤에 오는 숫자는 선택 사항입니다. 그렇지 않으면 소수가 있어야하며 그 뒤에 최소 한 자리가 와야합니다. 소수점 뒤에 여러 개의 후행 0이 허용됩니다.
grep -E '^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$'
다음과 올바르게 일치합니다.
9
0
10
10.
0.
0.0
0.100
0.10
0.01
10.0
10.10
.0
.1
.00
.100
.001
서명 된 등가물뿐만 아니라 다음을 거부합니다.
.
00
01
00.0
01.3
및 서명 된 등가물과 빈 문자열.
(?<![^d])\d+(?:\.\d+)?(?![^d])
깨끗하고 간단합니다.
접미사 및 접두사, RegEx 기능을 사용합니다.
IsMatch 조건에 대해 true-false를 직접 반환합니다.
^\d+(()|(\.\d+)?)$
이것으로 나왔습니다. 정수와 소수를 모두 허용하지만 소수를 입력하기로 결정한 경우 완전한 소수 (선행 및 후행 숫자)를 적용합니다.
요청한 내용은 이미 답변되어 있으므로 선택적 소수점을 입력하면 소수점 2 자리 만 원하는 사용자를위한 추가 정보 일뿐입니다.
^\d+(\.\d{2})?$
^ : 문자열 시작
\ d : 숫자 ([0-9]와 같음)
+ : 1 회 무제한
그룹 (. \ d {2})을 캡처 하시겠습니까?
? : 0 번과 1 번. : 캐릭터 .
\ d : 숫자 ([0-9]와 같음)
{2} : 정확히 2 배
$ : 문자열의 끝
1 : 일치
123 : 일치
123.00 : 일치
123. : 일치하지 않음
123 .. : 일치하지 않음
123.0 : 일치
하지 않음
123.000 : 일치하지 않음 123.00.00 : 일치하지 않음
Perl에서 Regexp :: Common을 사용하면 특정 숫자 형식에 대해 미세 조정 된 정규 표현식을 조합 할 수 있습니다. Perl을 사용하지 않는 경우 생성 된 정규식은 일반적으로 다른 언어에서 계속 사용할 수 있습니다.
Regexp :: Common :: Number에서 예제 정규식 생성 결과를 인쇄합니다.
$ perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))