Para que o "script" possa ser executado faz-se necessário autoriza-lo através do Windows® PowerShell® , sendo assim, execute o Windows® PowerShell® e digite o seguinte comando: get-help about_signing. Esse comando irá listar as opções de "Diretivas de Assinatura e de Execução" de "Script", leia-as atentamente. Mas se quiser pular esse passo (eu não recomendo)digite o seguinte comando no Windows® PowerShell® : Set-ExecutionPolicy Unrestricted. Esse comando fará que qualquer "Script" seja executado em sua máquina (mas atente para os ítens de segurança listados à partir do comando get-help about_signing). |
Segue o Fragmento do código que faz a validação:
/*/ Funcao: PSRegEx Autor: Marinaldo de Jesus Data: 03/04/2012 Uso: Exemplo de Uso de RegExp via PowerShell /*/ Static Function PSRegEx( cString , cPattern ) Local cMatch := "" Local cPSScript := "" Local cPSOutPath := GetTempPath() Local cPSOutFile := CriaTrab(NIL,.F.) Local cPSOutPathFile := ( cPSOutPath + cPSOutFile+".ini" ) Local cPSFileScript := cPSOutFile Local cPSScriptPathFile := ( cPSOutPath + cPSFileScript+".ps1" ) Local oTFIni Local lMatch := .F. BEGIN SEQUENCE While File( cPSOutPathFile ) .or. File( cPSScriptPathFile ) cPSOutFile := CriaTrab(NIL,.F.) cPSOutPathFile := ( cPSOutPath + cPSOutFile+".ini" ) cPSFileScript := cPSOutFile cPSScriptPathFile := ( cPSOutPath + cPSFileScript+".ps1" ) End While cPSScript += '"' cPSScript += '[PS_REGEX]' cPSScript += '`r`n' cPSScript += 'match=' cPSScript += '"' cPSScript += '+' cPSScript += '([regex]::ismatch("'+cString+'","'+cPattern+'")).ToString() cPSScript += ' | ' cPSScript += 'Out-File -Encoding "ASCII" "' + cPSOutPathFile + '"' MemoWrite( cPSScriptPathFile , cPSScript ) IF !File( cPSScriptPathFile ) BREAK EndIF WaitRun( "POWERSHELL " + cPSScriptPathFile ) IF !File( cPSOutPathFile ) BREAK EndIF oTFIni := TFINI():New( cPSOutPathFile ) cMatch := oTFIni:GetPropertyValue("PS_REGEX","match") DEFAULT cMatch := "FALSE" cMatch := Upper( cMatch ) lMatch := ( cMatch == "TRUE" ) oTFIni := FreeObj( oTFIni ) END SEQUENCE IF File( cPSScriptPathFile ) fErase( cPSScriptPathFile ) EndIF IF File( cPSOutPathFile ) fErase( cPSOutPathFile ) EndIF Return( lMatch ) |
Usei a Classe
TFIni para Carregar informações salvas pelo
Windows® PowerShell® e, em função disso, as dependências para a execução dos testes aumentaram.
Com esse novo exemplo teremos as seguintes saídas no Console do Protheus Server:
RegExp: [SoapRegExp][1.1][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.] RegExp: [SoapRegExp][1.2][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.] RegExp: [HttpGetRegExp][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.] RegExp: [HttpPostRegExp][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.] RegExp: [PSRegEx][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.] RegExp: [SoapRegExp][1.1][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.] RegExp: [SoapRegExp][1.2][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.] RegExp: [HttpGetRegExp][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.] RegExp: [HttpPostRegExp][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.] RegExp: [PSRegEx][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.] RegExp: [SoapRegExp][1.1][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [SoapRegExp][1.2][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [HttpGetRegExp][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [HttpPostRegExp][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [PSRegEx][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [SoapRegExp][1.1][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [SoapRegExp][1.2][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [HttpGetRegExp][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [HttpPostRegExp][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [PSRegEx][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.] RegExp: [SoapRegExp][1.1][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.] RegExp: [SoapRegExp][1.2][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.] RegExp: [HttpGetRegExp][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.] RegExp: [HttpPostRegExp][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.] RegExp: [PSRegEx][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.] RegExp: [SoapRegExp][1.1][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [SoapRegExp][1.2][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [HttpGetRegExp][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [HttpPostRegExp][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [PSRegEx][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [SoapRegExp][1.1][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [SoapRegExp][1.2][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [HttpGetRegExp][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [HttpPostRegExp][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [PSRegEx][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [SoapRegExp][1.1][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [SoapRegExp][1.2][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [HttpGetRegExp][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [HttpPostRegExp][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [PSRegEx][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.] RegExp: [SoapRegExp][1.1][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.] RegExp: [SoapRegExp][1.2][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.] RegExp: [HttpGetRegExp][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.] RegExp: [HttpPostRegExp][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.] RegExp: [PSRegEx][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.] RegExp: [SoapRegExp][1.1][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.] RegExp: [SoapRegExp][1.2][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.] RegExp: [HttpGetRegExp][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.] RegExp: [HttpPostRegExp][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.] RegExp: [PSRegEx][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.] |
Para consultar o código, clique
aqui.
Obs.:
1) No exemplo Utilizei WaitRun, logo a validação se dará no Client. Para que a validação ocorra no server consulte:
2) Leia “Password Strength Validation with Regular Expressions” para entender como validar senhas com expressões complexas.
[]s
иαldσ dj
Opa obrigado naldo... farei meus testes... eu quase nao uso power shell em meu cotidiano, mas essa solução me pareceu muito mais interessante do que acessar um webservice externo.... o jeito é treinar...
ResponderExcluirIsrael Neves.
Israel,
ResponderExcluirObviamente que são soluções paliativas. Dada a minha criatividade poderia implementa-las de n formas.
Considerando que a Totvs usa a biblioteca QT da Nokia para desenvolver o Client a implementação de RegEx seria muito fácil se ela exportasse a classe QRegExp (http://qt-project.org/doc/qt-4.8/QRegExp.html) do QT para uso no Protheus.
Parabéns!
ResponderExcluirtaí um bom site para testar suas criações..
http://myregexp.com/signedJar.html