2009-04-20 8 views
0

친구,자바 스크립트에서 정규 표현식 사용하기

저는 자바 스크립트와 정규 표현식이 모두 새롭게 등장했습니다.

자바 스크립트 함수 내에서 쉼표 (,)가 1 회 이상 나타나는지 확인해야합니다. 만약 그렇다면 하나 또는 그 이상의 숫자가 있어야합니다.

이러한 조건이 나에 쉼표를 원하는 충족하는 경우

1,000.00를, 000.00은

ok가, 000.00이

1 ok가,

1,000,00 확인

입니다 괜찮습니다 삭제되므로 1,000.00이됩니다. 1000.00

내가 시도한 것은 :

var x = '1,000.00';

var regex = new RegExp ("[0-9] +, [0-9] +", "g");

var y = x.replace (regex, "");

경고 (y);

경고를 실행하면 ".00"이 표시되어 예상치 못한 결과가 나타납니다.

제공된 도움말을 미리 감사드립니다.

강력한 텍스트 편집 강력한 텍스트 모두 지금까지 입력

감사 주어진 3 개 답변. 불행히도 나는 내 질문에 대해 충분히 설명했다고 생각하지 않는다. 내가 달성하기 위해 노력하고 무엇

은 다음과 같습니다

텍스트에 쉼표가 있고 그 다음 쉼표를 제거하지만, 같이 문자열의 나머지 부분을 떠나 하나 이상의 숫자 양쪽이있는 경우.

텍스트에 쉼표가 있고 양쪽 끝에 하나 이상의 숫자가없는 경우 아무 것도하지 않습니다.

그래서 위에서 내 예를 사용 :

1,000.00는 1000.00

1,000,00 100000

000.00 같이 방치하게되고, 000.00

1, 000.00 1로 남겨 ,, 000.00

혼란에 사과!

+0

문자열 내의 쉼표 ... 예. String.replace (',', ''); – James

+0

코멘트 Jimmy에게 감사드립니다. 그것은 저의 첫 번째 해결책이었습니다! 안타깝게도 일부 필드에서는 쉼표를 서식의 일부로 포함 할 수 있습니다. 따라서 사용자가 필드를 떠나기 전에 쉼표를 입력했으면 적어도 한쪽이 숫자 여야합니다. 기본적으로 1 ,,,,,,,,,,,,,, 000 등을 입력하는 사용자를 막을 수 있습니다. –

답변

4

정규식이 1000보다 높은 주문에 매우 유연하지 않으며 쉼표가없는 입력에 문제가 있습니다.더 문제가되는 것은 관심있는 데이터의 일부를 매칭하고 대체하는 것입니다!

문제가되는 양식과 일치하는 정규식을 갖는 것이 바람직합니다.

다음은 입력 시작 부분, 입력 끝 부분, 쉼표가 아닌 숫자 또는 쉼표가 뒤에 오는 쉼표와 일치합니다 (순서대로). 당신이 lookbehind을 할 수있을 일이 있지만, 거의 모든 구현은 않습니다 JS없는 경우 옆으로

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,''); 

는이 모든 것이 훨씬 더 쉽습니다.

편집 질문 업데이트를 기반으로 :

좋아, 나는 그들이 같은 규칙이 있지만 정규식을 해결하기 위해 간단하게 얻는 이유를 이해하려고하지 않습니다

var y = x.replace(/(\d),(\d)/g, '$1$2'); 
+3

문자열을 뒤집어서 미리보기를 수행하여 lookbehind를 시뮬레이트 할 수 있습니다. – James

+0

물론 좋은 점은 있지만 OP는 앞뒤로 모두해야합니다. 중요한 경우 벤치마킹 수 있지만 여러 연산 위의 정규식보다 clunkier 될 것이라고 생각합니다. – annakata

+0

안녕 annakata, 솔루션 주셔서 감사합니다 - 두 번째 정확히 내가 필요했던 것입니다. 다시 한번 감사드립니다. 감사합니다. Ian –

2

I을

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$ 
  • [0-9] {1,3} : 1 자리 (3)에 다음과 같은 것을 사용할 것 S
  • ([0-9] {3}) * : 쉼표로 구분 [선택보다 자리 트리플렛
  • (\ [0-9] +). [옵션] + 도트 이상의 숫자

이 정규식이 일치하면 번호가 유효하다는 것을 알고 있습니다. 그 후에 쉼표를 모두 빈 문자열로 바꾸십시오.

+0

좋은 답변, 숫자의 정확성을 확인하여 시작하십시오. 이 작업이 완료되면 모든 쉼표를 제거해야합니다 ... –

1

그것은 당신이 세 가지 오류 조건

  1. "1000"
  2. "1000"
  3. "1, 000"

이 날 것으로 보인다 이들 중 어느 하나의 경우 사실이면 필드를 거부해야합니다. 모두 틀리면 쉼표를 정상적인 방법으로 제거하고 계속 진행할 수 있습니다.

^,|,,|,$ 
+0

매우 똑똑한 솔루션 – dfa

1

난 그냥 parseFloat()을 통해 출력을 숫자와 소수 구분 ([^0-9.])를 제외하고 무엇이든을 제거하고 보낼 것이다 : 이것은 간단한 교대 수 있습니다 단지 모두 제거하는 문제는 무엇

var y = parseFloat(x.replace(/[^0-9.]+/g, "")); 
1
// invalid cases: 
// - standalone comma at the beginning of the string 
// - comma next to another comma 
// - standalone comma at the end of the string 
var i, 
    inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'], 
    invalid_cases = /(^,)|(,,)|(,$)/; 
for (i = 0; i < inputs.length; i++) { 
    if (inputs[i].match(invalid_cases) === null) { 
     // wipe out everything but decimal and dot 
     inputs[i] = inputs[i].replace(/[^\d.]+/g, ''); 
    } 
} 
console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"]