2011-12-22 4 views
-1

문자열이 있고 숫자가 아닌 숫자를 큰 따옴표로 묶고 싶습니다 (아직없는 경우). 정규 표현식으로 숫자가 아닌 것을 감지하는 가장 좋은 방법은 무엇입니까?숫자가 아닌 문자열을 식별하는 정규식

숫자는 123.43, 13827입니다. 다음은 숫자가 아닙니다. Hello, 2011-02-45, 20a, A23.

저는 현재 가지고있는 정규식이지만 숫자가 아닌 숫자로 시작하는 경우는 처리하지 않습니다 (2011-02-45는 선택되지 않았습니다).

이 방법에 대해
str = str.replace(/(['"])?([a-zA-Z0-9_\-]+)(['"])?:/g, '"$2":'); 
str = str.replace(/:(['"])?([a-zA-Z_]+[a-zA-Z0-9_]*)(['"])?/g, ':"$2"'); 
+0

'Hello, 2011-02-45, 20a, A23.'의 입력이 주어지면 결과는'Hello, 2011-02-45, 20 "a", "A"23. " 아니면 오해입니까? 또한 그것이 맞다면,'Hello, 2011-02-45, 20abc, A23.'에서 어떻게되어야할까요? 아마'안녕하세요, 2011-02-45, 20 "abc", "A"23.' –

+0

'2011-12-22 2011 년 3 일'입니다. "2011"의 "오늘"은 "2011-12-22" ""제 3의 "하루" "입니다. 따라서 숫자 만 큰 따옴표로 묶이지 않습니다. –

답변

3

: 당신이 정규 표현식보다 더 많이 더 빨리 이런 일을 할 수 Validate decimal numbers in JavaScript - IsNumeric()

+0

그건 정규식이 아닙니다. 바꾸기를 사용하여 문자열의 임의의 비 번호를 래핑하고 싶습니다. 미안하지만 분명하지 않다. –

+2

@MartinDrapeau 너 틀 렸어! 이 anser는 매우 유용합니다! if 문에서 사용할 수 있고,'FALSE'를 반환하면 따옴표로 둘러 쌉니다.'if (! isNumber (x)) {x = ' "'+ x + '"'; }' –

+1

@Martin : allessioalex는 "정규식이 필요하지 않습니다."라고 말하고 있으며 그는 절대적으로 맞습니다. 불필요하게 코드를 복잡하게 만드는 (그리고 불완전한 - 그의 함수 호출이 모든 * 경우를 잡는 것처럼) 이유는 무엇입니까? – Ether

0

:

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

에서 촬영!

str = +str||false; 

STR = 123.4 또는 거짓 숫자가 아님이 실수로 "STR을"캐스트 또는 당신이 할 수있는 문자열로 떠날 것입니다

..

str = +str||str||false; 

에 다음 단계로 넘어 가면 출력을 확인할 수 있습니다.

if(typeof(str)=='string'){ 
    //str is a string 
} 
1

다른 질문을 읽어서 해결책을 찾았습니다. 이것은 : str.replace(/(['"])?([a-zA-Z0-9_\-]*[a-zA-Z_\-]+[a-zA-Z0-9_\-]*)(['"])?/g, '"$2"');

트릭은 일치하는 숫자가 아닌지 확인하는 것입니다.

관련 문제