kapiaba Posted January 30, 2012 Report Share Posted January 30, 2012 Buenos dias señores, Preciso saber como posso fazer para checar um campo do BD. Exmplo: Se o usuário digitar: SS14SILVA, ou SSSILVA14, ou 2444SILV, Não pode existir numeros misturados com o texto, ou seja só pode ser tudo ALFA ou tudo NÚMERICO. Preciso parar o programa e avisar o uçuário que esta operação é proibida. Como checar se tem números misturados com alfa?? Desde já, agradeço qualquer susgestão. Obg, abraços. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 30, 2012 Author Report Share Posted January 30, 2012 Buenos dias señores, Preciso saber como posso fazer para checar um campo do BD. Exmplo: Se o usuário digitar: SS14SILVA, ou SSSILVA14, ou 2444SILV, Não pode existir numeros misturados com o texto, ou seja só pode ser tudo ALFA ou tudo NÚMERICO. Preciso parar o programa e avisar o uçuário que esta operação é proibida. Como checar se tem números misturados com alfa?? Desde já, agradeço qualquer susgestão. Obg, abraços. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
vailtom Posted January 30, 2012 Report Share Posted January 30, 2012 Uma idéia que me passou por aqui: se vc fizer uma funcao que "conte" quantos numeros e depois quantas letras existem... você poderia comparar as duas variaveis e exibir uma mensagem apropriada se necessário. Conseguiu compreender-me? Att, Vailton Renato Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 30, 2012 Author Report Share Posted January 30, 2012 NÃO!!!id=size5> KKKKKKKKKKKKKKKKKKKKKKK É aleatório, cada um cria do jeito que achar melhor. Mas, estou modificando a tela para que o "jumento/a" tenha uma mensagem que só pode ALFA ou NÚMEROS. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Editado por - kapiaba on 30/01/2012 11:07:30 Quote Link to comment Share on other sites More sharing options...
vailtom Posted January 30, 2012 Report Share Posted January 30, 2012 Vc diz entao é que "parametrizável" certo? Mas pelo que eu entendi o problema resume-se a isto mesmo: só alfa ou só num... Quote Link to comment Share on other sites More sharing options...
CTOAS Posted January 30, 2012 Report Share Posted January 30, 2012 Bom dia... Em xHarbour teste1:= "aaaaa" teste2:= "878nb" ? IsAlpha(teste1) * Retorna .T. ? IsAlpha(teste2) * Retorna .F. id=code>id=code>Seria isso que precisas? Quote Link to comment Share on other sites More sharing options...
vailtom Posted January 30, 2012 Report Share Posted January 30, 2012 Mas não lembro se o IsAlpha() testa apenas o primeiro digito ou todos. Se for só o primeiro não acusaria erro em "Silv4"... Quote Link to comment Share on other sites More sharing options...
CTOAS Posted January 30, 2012 Report Share Posted January 30, 2012 Voce tem razão, só pega o primeiro... Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 30, 2012 Author Report Share Posted January 30, 2012 E para "piorar" o campo tem 40 caracteres e cada FPD, cria como achar melhor... Estou colocando TOOLTIP que ´fala", e vou mostrar mensagem na tela também, acho que assim o uçuário vai entender. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 30, 2012 Report Share Posted January 30, 2012 Sugiro, que neste caso teste os caractes válidos, mas pde inverter tb.: cVAR := SPACE(20) //....ENTRA COM DADO NO GET cVAR := "SS14SILVA " cVAR := ALLTRIM(cVAR) FOR nPOS:=1 TO LEN(cVAR) //65="A" 90="Z" 97="a" 122="z" IF !((ASC(cVAR[nPOS])>= 65 .AND. ASC(cVAR[nPOS])<= 90) .OR.; (ASC(cVAR[nPOS])>= 97 .AND. ASC(cVAR[nPOS])<= 122)) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF NEXT RETURN .T. id=code>id=code> Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 30, 2012 Author Report Share Posted January 30, 2012 citação:Sugiro, que neste caso teste os caractes válidos, mas pde inverter tb.: cVAR := SPACE(20) //....ENTRA COM DADO NO GET cVAR := "SS14SILVA " cVAR := ALLTRIM(cVAR) FOR nPOS:=1 TO LEN(cVAR) //65="A" 90="Z" 97="a" 122="z" IF !((ASC(cVAR[nPOS])>= 65 .AND. ASC(cVAR[nPOS])<= 90) .OR.; (ASC(cVAR[nPOS])>= 97 .AND. ASC(cVAR[nPOS])<= 122)) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF NEXT RETURN .T. id=code>id=code> id=quote>id=quote>Opa, está melhorando, vou testar e reporto. Obrigado. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
CTOAS Posted January 30, 2012 Report Share Posted January 30, 2012 Simples mas funcional cTESTE:="SS14SILVA" TESTACHAR(cTESTE) FUNCTION TESTACHAR(VAR) cNUMBERS:="1234567890" FOR I:=1 TO LEN(cNUMBERS) IF ALLTRIM(STR(I)) $ VAR RETURN .T. ENDIF NEXT RETURN .F. id=code>id=code> Editado por - ctoas on 30/01/2012 11:40:17 Editado por - ctoas on 30/01/2012 11:41:33 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 30, 2012 Author Report Share Posted January 30, 2012 citação:Sugiro, que neste caso teste os caractes válidos, mas pde inverter tb.: cVAR := SPACE(20) //....ENTRA COM DADO NO GET cVAR := "SS14SILVA " cVAR := ALLTRIM(cVAR) FOR nPOS:=1 TO LEN(cVAR) //65="A" 90="Z" 97="a" 122="z" IF !((ASC(cVAR[nPOS])>= 65 .AND. ASC(cVAR[nPOS])<= 90) .OR.; (ASC(cVAR[nPOS])>= 97 .AND. ASC(cVAR[nPOS])<= 122)) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF NEXT RETURN .T. id=code>id=code> id=quote>id=quote>JMSILVA, Cuasi... Veja: "24kapiaba" -> barra corretamente. "kapiaba24" -> barra corretamente. "kapiaba" -> Deixa passar corretamente. "24242424" -> Barra incorretamente, somente números também pode passar... Como saio desta??? Obrigado, abraços. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 30, 2012 Report Share Posted January 30, 2012 Desculpe, não prestei atenção que pode só número. SEGUE CARREÇÃO, DEVIDAMENTE TESTADA: FUNCTION MAIN() LOCAL CVAR,nPOS,cPRIMEIRO_CHR cVAR := "AXXXX" //ALLTRIM(cVAR) //DEFINE QUAL O PRIMEIRO CARACTERE SE EH CHAR OU NUMERIC cPRIMEIRO_CHR:="X" IF ((ASC(cVAR[1]) >= 65 .AND. ASC(cVAR[1]) <= 90) .OR.; (ASC(cVAR[1]) >= 97 .AND. ASC(cVAR[1]) <= 122)) cPRIMEIRO_CHR := "C" ELSEIF ASC(cVAR[1]) >= 48 .AND. ASC(cVAR[1]) <= 57 cPRIMEIRO_CHR := "N" ENDIF //ERRO NÃO E LETRA E NEM NUMERO IF cPRIMEIRO_CHR == "X" MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF FOR nPOS:=1 TO LEN(cVAR) //65="A" IF cPRIMEIRO_CHR == "C" IF !((ASC(cVAR[nPOS]) >= 65 .AND. ASC(cVAR[nPOS]) <= 90) .OR.; (ASC(cVAR[nPOS]) >= 97 .AND. ASC(cVAR[nPOS]) <= 122)) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF ELSE IF !(ASC(cVAR[nPOS]) >= 48 .AND. ASC(cVAR[nPOS]) <= 57) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF ENDIF NEXT MSGSTOP("NOME ACEITO","XXX") RETURN .T. id=code>id=code> Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 30, 2012 Author Report Share Posted January 30, 2012 citação:Desculpe, não prestei atenção que pode só número. SEGUE CARREÇÃO, DEVIDAMENTE TESTADA: FUNCTION MAIN() LOCAL CVAR,nPOS,cPRIMEIRO_CHR cVAR := "AXXXX" //ALLTRIM(cVAR) //DEFINE QUAL O PRIMEIRO CARACTERE SE EH CHAR OU NUMERIC cPRIMEIRO_CHR:="X" IF ((ASC(cVAR[1]) >= 65 .AND. ASC(cVAR[1]) <= 90) .OR.; (ASC(cVAR[1]) >= 97 .AND. ASC(cVAR[1]) <= 122)) cPRIMEIRO_CHR := "C" ELSEIF ASC(cVAR[1]) >= 48 .AND. ASC(cVAR[1]) <= 57 cPRIMEIRO_CHR := "N" ENDIF //ERRO NÃO E LETRA E NEM NUMERO IF cPRIMEIRO_CHR == "X" MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF FOR nPOS:=1 TO LEN(cVAR) //65="A" IF cPRIMEIRO_CHR == "C" IF !((ASC(cVAR[nPOS]) >= 65 .AND. ASC(cVAR[nPOS]) <= 90) .OR.; (ASC(cVAR[nPOS]) >= 97 .AND. ASC(cVAR[nPOS]) <= 122)) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF ELSE IF !(ASC(cVAR[nPOS]) >= 48 .AND. ASC(cVAR[nPOS]) <= 57) MSGSTOP("NOME INVÃLIDO","xxx") RETURN .F. ENDIF ENDIF NEXT MSGSTOP("NOME ACEITO","XXX") RETURN .T. id=code>id=code> id=quote>id=quote>P E R F E I T Oid=size5> Carissimo: Thank you very much - Gracias - Obrigado. Ficou Show() João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
vagner Posted January 30, 2012 Report Share Posted January 30, 2012 Olá, Pode Fazer desse jeito tb cNome := "V1A2G3N4E5R" lTemAlfa := .F. lTemNume := .F. For nX := 1 To Len(cNome) If IsAlpha(cNome[nX]) ; lTemAlfa := .T. ; Endif Next For nX := 1 To Len(cNome) If !IsAlpha(cNome[nX]) ; lTemNume := .T.; Endif Next If lTemAlfa .and. lTemNume MsgStop("Erro") Else MsgStop("Correto") Endif id=code>id=code>Ou Usar o IsDigit() ao invés do !IsAlpha() Vagner Wirts "Ele não sabendo que era impossÃvel, foi lá e fez" Quote Link to comment Share on other sites More sharing options...
sambomb Posted January 30, 2012 Report Share Posted January 30, 2012 Function Verifica( cString ) Local nNum := 0, nChar := 0, i := 0, Result := {.F.,"M"} For i := 1 to Len(cString) If SubStr(cString,i,1) $ "0123456789" nNum++ else nChar++ end If nNum > 0 .And. nChar > 0 exit end end If nNum = Len(cString) Alert("Tudo número") Result[1] := .T. Result[2] := "N" elseif nChar = Len(cString) Alert("Tudo caracter") Result[1] := .T. Result[2] := "C" else Alert("Misturado") Result[1] := .F. Result[2] := "M" end Return Result id=code>id=code> RCA Sistemas - Itaocara - RJ Quote Link to comment Share on other sites More sharing options...
sgbm Posted January 31, 2012 Report Share Posted January 31, 2012 Kapiaba, bom dia. A função "AT" seria a melhor para você utilizar. AT() é uma funçao de tratamento de dados tipo caractere utilizada para determinar a posiçao da primeira ocorrência de um substring dentro de outra cadeia de caracteres. ? AT("a", "abcde") // Resulta: 1 ? AT("bcd", "abcde") // Resulta: 2 ? AT("a", "bcde") // Resulta: 0 Então você pode usar um FOR de zero a nove com a "AT" dentro dele para localizar dentro da sua variável. Att. Sócrates Gambarra. citação:Buenos dias señores, Preciso saber como posso fazer para checar um campo do BD. Exmplo: Se o usuário digitar: SS14SILVA, ou SSSILVA14, ou 2444SILV, Não pode existir numeros misturados com o texto, ou seja só pode ser tudo ALFA ou tudo NÚMERICO. Preciso parar o programa e avisar o uçuário que esta operação é proibida. Como checar se tem números misturados com alfa?? Desde já, agradeço qualquer susgestão. Obg, abraços. João Santos - São Paulo. joao@pleno.com.br Fone: (11) 3106-2832 http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196 FWH 2.7 - xHARBOUR WorkShop.Exe id=quote>id=quote> Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.