2013-06-17 2 views
-2

여기에 문제가 있습니다. 내가 백엔드에서 문자열을 받고 대문자로 두 글자를 교체하고 싶습니다. 다음은 코드입니다.문자열에서 두 번째 문자를 소문자에서 대문자로 바꾸는 방법

var query = "WHERE account >= 23 || company != null;"; 
var slicedQuery = query.slice(7); 

slicedQuery = slicedQuery.replace(slicedQuery.charAt(slicedQuery.lastIndexOf(";")), ""); 

var firstChar = slicedQuery.charAt(0); 
slicedQuery = slicedQuery.replace(firstChar, firstChar.toUpperCase()); 

if(slicedQuery.indexOf("|") >= 0) { 

    var charInCondition = slicedQuery.charAt(slicedQuery.indexOf("|") + 3); 

    slicedQuery = slicedQuery.replace(charInCondition, charInCondition.toUpperCase()); 
} 

'a'가 'A'로 올바르게 대체되었습니다. 그러나 회사의 'c'는 교체되지 않습니다. 대신 Acconut의 'c'가 'C'로 대체됩니다. 어떻게하는지 알려주십시오. 도움!

+6

JS가 SQL 쿼리를 작성하고 있습니까? 그게 나쁘다. – kennypu

+0

@kennypu 사용자가 개발자 도구, 방화범 등을 변경하고 모든 자유를 가지기가 얼마나 쉬운 지 이해하려고 노력한다. 농담 .... 그것은 아주 나쁜 것입니다. – TheVillageIdiot

+0

코드는 단지 jquery를 통해 쿼리를 생성 할 수 있으며 나중에 서블릿에서 처리됩니까? 하지만 여전히 그 경우에 좋지 않을 것이며 해킹에 취약 할 수도 있습니다. – mel3kings

답변

0

문제

첫 번째 인자의 첫 번째 선두로부터를 대체 할 기능 replace. 코드가 'c'("회사")를 대체해야한다고 올바르게 인식하지만 replace을 호출하면 'c'의 첫 번째 발생 ('계정'에서) 만 변경됩니다.


당신이 당신의 if 블록 내부의 코드를 교체 할 필요가 해결책 :

var idx = slicedQuery.indexOf("|") + 3; 
var charToReplace = slicedQuery.charAt(idx); 
slicedQuery = slicedQuery.substring(0, idx) 
       + slicedQuery.substring(idx).replace(
     charToReplace, charToReplace.toUpperCase()); 

을 (BTW 당신이 .slice(7)하지 .slice(6)해야 확실?)

+0

고맙습니다. ExpertSystem.For 제 문제를 올바르게 이해하고 해결해 주셔서 감사합니다. 완벽하게 작동합니다. 다시 한번 감사드립니다. – Trisha

관련 문제