• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mapb_1990

validação com regex

6 mensagens neste tópico

preciso de validar o input do utilizador. ele tem k ser uma função do tipo ax^3+bx^2+cx+d

regex = "((\\-|\\+)?(\\d+|\\d+[\u002E|\u002C]\\d+)?x\\^3)?" +

"((\\-|\\+)(\\d+|\\d+[\u002E|\u002C]\\d+)?x\\^2)?" +

"((\\-|\\+)(\\d+|\\d+[\u002E|\u002C]\\d+)?x)?" +

"((\\-|\\+)(\\d+|\\d+[\u002E|\u002C]\\d+)?)?";

fiz este regex, mas tem um problema. kuando nao insiro a 1ª parte da função (ax^3), obrigatóriamente tenho que inserir o sinal nas outras.

por exemplo: se inserir 2x^2+4x+65 nao passa, mas se for +2x^2+4x+65, já da.

ora, eu queria que aceita-se com ou sem sinal, caso seja o primeio polinomio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez te ajude se prefixares com "^[-+]?"

Isto fá-lo aceitar um sinal, opcionalmente, mas só no inicio da string.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez te ajude se prefixares com "^[-+]?"

Isto fá-lo aceitar um sinal, opcionalmente, mas só no inicio da string.

como? assim?

                regex = "^[-+]?((\\d+|\\d+[\u002E|\u002C]\\d+)?x\\^3)?" +
                        "((\\-|\\+)(\\d+|\\d+[\u002E|\u002C]\\d+)?x\\^2)?" +
                        "((\\-|\\+)(\\d+|\\d+[\u002E|\u002C]\\d+)?x)?" +
                        "((\\-|\\+)(\\d+|\\d+[\u002E|\u002C]\\d+)?)?";

é k assim, tenho o mesmo problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hummm... pois, li o teu problema na diagonal e dei só uma dica que podia ajudar, mas realmente não resolve. Não tou a ver nenhuma forma simples de fazer isso com uma expressão regular (sem ter um porradão enorme de |). Eu no teu lugar se calhar implementava um algoritmo, não baseado apenas em expressões regulares, até porque seria bastante mais flexível e com facilidade poderia aumentar para graus maiores. A tua expressão regular é muito rígida, não permite trocar a ordem a termos, nem ter termos em várias partes (como "3x - 2 + 4x"). Eu começava por remover todos os espaços da expressão, depois adicionava 1 espaço antes de cada sinal e a seguir partia por espaços. Aí fazia um loop a cada termo para o parsar e acumular numa estrutura de dados apropriada e/ou verificar a sua validade com uma expressão regular já bastante mais simples.

Ou então... garantes que a expressão começa sempre com um sinal, e fazes a expressão regular verificar isso. Basta adicionares o sinal ao inicio da expressão caso esta não o tenha. Por exemplo: o utilizador introduz "3x + 1"; tu vês que não começa com + ou - e portanto prefixas com +, ficando "+3x + 1". Aí já facilmente consegues uma expressão regular para parsar a expressão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta uma abordagem mais simples, embora julgue que se possa simplificar essa expressão regular, mas podes simplesmente separar o input dado através dos sinais de mais ou de menos. Depois validas os elementos resultantes.

Por exemplo, podes usar o método split das strings para dividir pelos sinais ou usar o StringTokenizer se pretenderes algo mais elaborado, embora o split deva ser suficiente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

resolvi fazer com o Njay disse.

testo se a expressao tem ssinal no inicio, se nao tiver ponho-a.

eu ate queria fazer o k o njay disse em 1º lugar, mas ja n tenho tempo. :D

obrigada aos 2

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora