2011-11-15 6 views
2

ColdFusion 9.0.1을 사용하고 있습니다.RegEx를 사용하여 ColdFusion에서 영숫자가 아닌 문자를 허용하지 않는 방법

사용자가 영숫자가 아닌 값을 제공했는지 여부를 테스트하려고합니다. 그들이 가지고 있다면, 나는 거짓을 돌려주고 싶다. 내가 가까이 나는 확신 해요,하지만 난 오류가 점점 계속 :이 작품을 만드는 여러 가지 방법을 시도했습니다

Complex object types cannot be converted to simple values. 

,하지만 난 그게 동작하지 않습니다.

특히, z부터 0까지 9 개만 허용하고 싶습니다. 공백이나 특수 문자가 없습니다.

이 설정을 조정할 수 있습니까? ReMatchNoCase 배열 아닌 단순한 문자열을 반환하기 때문에

<cfscript> 
     LOCAL.Description = trim(left(ARGUMENTS.Description, 15)); 
     if (len(LOCAL.Description) lte 4) { 
      return false; 
     } else if (reMatchNoCase("[^A-Za-z0-9_]", LOCAL.Description) neq "") { 
      return false; 
     } else { 
      return true; 
    </cfscript> 

+1

당신이 게시 한 오류 메시지 - 당신의 질문의 설명 - 최대 추가하지 마십시오. 오류는 변수 (string, number 등)가 단순한 것처럼 검사하고 처리하는 것과 관련이 있지만 사실 변수는 복잡한 유형 (객체, 배열, 구조체 등)입니다. 그러나, 여러분의 질문은 완전히 다른 것을 묻습니다 - 캐릭터 라인에서 영숫자가 아닌 문자를 일치 시키거나 거부하는 정규식 패턴은 무엇입니까? ([[: alnum :]] POSIX 참조로 싸여 있습니다). 발생한 문제를 다시 분석하고 다시 분석해야 할 수도 있습니다. –

답변

4

reMatchNoCase 반환 배열은, 실제로 코드에서 또 다른 문제가 어떤 경기

이이 있는지 확인하기 위해 결과에 ArrayLen()를 사용합니다. 설명의 길이가 15보다 작 으면 첫 번째 줄에서 오류가 발생하므로 첫 번째 IF는 항상 거짓이므로 폐기됩니다.

+0

길이가 15보다 작 으면 오류가 발생하지 않아야합니다. 전체 문자열을 "있는 그대로"반환해야합니다. – Leigh

+0

해결책을 가져 주셔서 감사합니다 : else if (arrayLen (reMatchNoCase ("[^ A-Za-z0-9_]", LOCAL.Description)) eq 0) –

+0

이렇게하면 간단해질 수 있습니다 : else if (! arrayLen (reMatchNoCase ("[^ A-Za-z0-9_]", LOCAL.Description)))'CF 8에서도 작동합니다. –

2

reMatchNoCase("[^A-Za-z0-9_]", LOCAL.Description) neq ""

W는이다. 배열 길이를 확인하거나 더 나은 방법으로 ReFindNoCase을 대신 사용하십시오. 첫 번째 일치 항목의 위치를 ​​반환하거나 찾지 못한 경우 0을 반환합니다. 문자열 비교할 수없는

+0

힌트를 보내 주셔서 감사합니다! –

+0

@Evik - 환영합니다 :) 결과 배열을 아무 것도 사용하지 않는 것 같아서,'ReFind'가 효율성 POV에서 더 의미가 있다고 생각합니다. – Leigh

+0

나는 그것에게 소용돌이를 줄 것이다. 감사! –

2

당신은 또한 다음과 같은 방법을 시도 할 수 있습니다 :

<cfscript> 
    local.description = trim(local.description); 
    return reFind("(?i)^[A-Z0-9_]{5,}$", local.description)?true:false; 
</cfscript> 
+0

3 진법을 사용하면 '? true : false'가 중복되지만, 그렇지 않으면이 해결책은 다른 길이와 문자를 일치시키는 것보다 더 합리적입니다. –

+2

아, 더 간단한 정규 표현식은 단순히'^ \ w {5,} $'입니다. 그러면'(? i)'가 필요 없습니다. –

관련 문제