2013-02-13 3 views
0

split 함수를 사용하는 대신 num * num * num 형식의 Eegular 식을 사용하려고합니다.split 함수를 num * num * num 형식으로 사용하는 대신 정규 표현식

사용자가 2 * 3 * 4 형식 (anynumber * anynumber * anynumber) 만 입력 할 수 있도록 입력의 유효성을 검사하려고합니다. 나는 split 함수를 사용하여 성공했다. Javascript에서 정규 표현식을 사용하여이를 수행 할 수있는 방법이 있습니까?

+0

내가이'code' 기능 재미있을 것 그것을 할 수() { \t \t var에 dpattern =/\ */난; \t \t \t \t var str = document.getElementById ("name"). 값; \t \t var order = dpattern.exec (str); \t \t 경우 (순서) \t \t \t \t { \t VAR N = str.split ("*"); \t \t \t \t \t \t var a = n [0]; \t \t \t var b = n [1]; \t \t \t var c = n [2]; \t \t \t var d = a * b * c; \t \t \t 경고 (d); 또한 "2 # 레몬! BMW"를 통과 @Ivin \t \t \t \t \t \t \t} } –

답변

0

아마 시도 :

조각에서
document.write("2 * 3 * 4".match(/[0-9]+[\s]?\*[\s]?[0-9]+[\s]?\*[\s]?[0-9]+/)); 
1

, 당신은 그것을 다른 번호 다음 적어도 하나의 숫자, 그리고 임의의 수의 (공간의 수, 별표, 공간의 수 등을 갖고 싶어). 이 시도 : \s*는 0 개 이상의 공백 문자입니다

^\d+(\s*\*\s*\d)*$ 

\d+을 (네거티브와 소수를 제외한 1과 0의 숫자로 시작하는) 자리의 숫자가되며, \*은 백 스페이스 앞에 별표 (그래서 "0 이상"을 의미하는 것으로 혼동하지 않습니다). 괄호는 끝을 그룹으로 묶어 끝에 여러 개의 끝을 가질 수 있습니다. ^$을 추가해야 시작 및 종료시 다른 임의의 문자가 무시되지 않습니다.

는 당신은 앞으로 사용할 수 있습니다

때문에, 자바 스크립트에서 정규 표현식을 표시하기 위해 슬래시 :

var pattern = /^\d+(\s*\*\s*\d)*$/; 
pattern.test("2 * 3 * 4"); // true 
pattern.test("002 * 3* 04"); // true 
pattern.test("2 # 3 # 4"); // false 
pattern.test("2.0 * 3 * 4"); // false 
pattern.test("-2 * 3 * 4"); // false 

당신이 앞이나 공간 또는 기능의 다른 종류의 후행 소수, 음수를 원하는 경우

, 당신이 필요합니다 조금 비틀어지기 위해 ... 그러나 희망을 갖고 이것은 당신에게 계속할 충분한 것을 준다!

+0

이 또한 2 # 2 # 2 –

+0

기타 특수 문자 유효 나온다. Javascript에서 작동하려면'test' 메소드에'^'와'$'를 추가해야 할 수도 있습니다. 그렇지 않으면 첫 번째 숫자를 찾고 괄호 안에 비트의 인스턴스가 없으며 여전히 true를 반환합니다. –

0

사용 패턴과 일치 할 수있는 사항은 다음과 같습니다

이 패턴은 한 자리 숫자 (숫자, 스타, 자리, 스타, 자리)

^\d\*\d\*\d$ 

이 패턴은 길이의 숫자와 일치 일치 (숫자, 별, 숫자, 별, 숫자)

^\d+\*\d+\*\d+$ 

\ s 식별자를 사용하여 공백을 허용 할 수도 있습니다.

^\d\s?\*\s?\d\s?\*\s?\d$ 
0

이 당신이 원하는 것 :

^\d+\s*\*\s*\d+\s*\*\s*\d+$ 

이 있습니다 정수 * 정수 * 수와 0 개 이상의 공백 정수와 다음은 숫자와 기호 사이에 하나의 공백을 할 수 있습니다 *.

소수 부분, 사용을 허용하는 경우 : 음수를 들어

^\d+(\.\d+)?\s*\*\s*\d+(\.\d+)?\s*\*\s*\d+(\.\d+)?$ 

같은 옵션 - 수 있도록 -?을 추가

^-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?$ 

^\s*-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?\s*\*\s*-?\d+(\.\d+)?\s*$는 0 개 이상의 공간 이전과 발현 후 수 있습니다.

$1, $3$5^\s*(-?\d+(\.\d+)?)\s*\*\s*(-?\d+(\.\d+)?)\s*\*\s*(-?\d+(\.\d+)?)\s*$의 경우 각각 3 개 개의 숫자를 줄 : 숫자를 캡처, 캡처 그룹을 사용합니다.

캡처가 필요하고 두 개 이상의 요소

-?\d+(\.\d+)?(\s*\*\s*-?\d+(\.\d+)?)+ 

가 더 좋을 것이다 허용하지 않는 경우.

+0

이것은 입력의 유효성을 검사하기 때문에 결과를 캡처 할 수 있는지 여부는 신경 쓰지 않는다고 생각합니다. 솔루션은 임의의 수의 요소에 대해 일반화 할 수 있습니다. – nhahtdh

+1

'-? \ d + (\. \ d +)? (\ s * \ * \ s * -? \ d + (\. \ d +)?) –

관련 문제