Jump to content

Remover traço de um conjunto de números


klasss
Go to solution Solved by pwseo,

Recommended Posts

Criei um script para ir buscar um valor e carregar um conjunto de dados.

O formato correto é: 0000-000 Mas quando faço a pesquisa em json só permite que seja neste formato : 0000000 , ou seja, sem o traço.

var input = document.querySelector("#CP");

input atual: 1234-567 e agora quero que seja removido o traço .

Já tentei desta forma e não funcionou. 


var CP_semtraco = input.replace(/[-]/g,"");

 

Obrigado pelas dicas!

Link to comment
Share on other sites

Em 07/06/2023 às 16:39, antseq disse:

viva,

tens a certeza que não funciona? só por curiosidade experimentei o teu próprio código e parece funcionar.

var input = "1234-567"; 
var CP_semtraco = input.replace(/[-]/g,"");
console.log(`${input} => ${CP_semtraco}`);

Output:

1234-567 => 1234567

Agora o que parece que me está a falhar é a var CP_semtraco. 
Aparece a seguinte mensagem
Uncaught ReferenceError: cp_semtraco is not defined at <anonymous>:1:1

Link to comment
Share on other sites

Viva

Tens que dar um pouco mais de código para ser conseguir ver melhor o que se passa.

O regex está ok como disse e testou o @antseq agora depende o que estás a fazer com o resultado a seguir.

Qual é a estrutura do JSON onde estás a pesquisa? Como é que estás a fazer a pesquisa?

 

Este tipo de informações ajudam muito para te ajudarmos

Feito é melhor que perfeito

Link to comment
Share on other sites

Em 07/06/2023 às 20:27, klasss disse:

Agora o que parece que me está a falhar é a var CP_semtraco. 
Aparece a seguinte mensagem
Uncaught ReferenceError: cp_semtraco is not defined at <anonymous>:1:1

Assumindo que não estás a cometer um erro por diferenças entre os nomes das variáveis (ie. CP_semtraco e cp_semtraco são nomes diferentes), poderás estar a ter problemas com o scope da variável. Como referiu o @Ivo Vicente, será necessário forneceres um pouco mais de contexto para compreendermos melhor qual o problema, dado que isoladamente a regexp utilizada faz o que se pretende -- o que significa que o problema está noutro lado.

Link to comment
Share on other sites

var input = document.querySelector("#codigopostal");
    var CPsemtraco = input.replace(/[-]/g,"");

	const request = new XMLHttpRequest();
	const url = 'LINKAPI' + CPsemtraco.value;
	request.open("GET", url);
	request.send();

Depois apenas recebo os dados e mostro nos campos certos. 

A mensagem que me aparece agora é : input.replace is not a function
 

Edited by klasss
Link to comment
Share on other sites

Qual o tipo de dados de input? Se é o resultado de uma document.querySelector, provavelmente input não é uma string, e como tal, não tem o método replace.

A que elemento HTML deste o id #codigopostal? Se for um elemento <input>, então podes referir-te ao texto nele contido através da sua propriedade value:

var foo = input.value.replace(/* ... */);

 

Edited by pwseo
Clarificação, dica.
Link to comment
Share on other sites

Em 08/06/2023 às 11:01, pwseo disse:

Qual o tipo de dados de input? Se é o resultado de uma document.querySelector, provavelmente input não é uma string, e como tal, não tem o método replace.

A que elemento HTML deste o id #codigopostal? Se for um elemento <input>, então podes referir-te ao texto nele contido através da sua propriedade value:

var foo = input.value.replace(/* ... */);

 

O valor de INPUT vem do campo codigo postal. 

 

<input type="text" class="form-control" placeholder="Código Postal" id="codigopostal" name="codigopostal" aria-label="Username" aria-describedby="basic-addon1" value="{{old('CP')}}">
 <a class="btn btn-secondary" href="" type="button" onclick="myFunction()" data-toggle="modal"  role="button" >Preencher atraves de CP</a>

Preencho o campo código postal e depois ao pressionar o botão envia o valor do codigo postal para dentro do input. 

Os valores que lá são: 
0000 (4 números) - (traço) 000 (3 números)

 

Link to comment
Share on other sites

  • Solution

@klasss

Estavas (estás?) a confundir várias coisas. O problema reside no facto da tua variável input ser um elemento HTML <input>, e não a string que representa o texto nele escrito (à qual podes referir-te através da propriedade/atributo .value). Assim sendo, quando estavas a invocar o método .replace, obtinhas o erro de que tal função não existe -- pois a mesma só existe quando aplicada em strings.

Portanto, primeiro tens que extrair o texto do <input> e só depois operar no mesmo:

var input_element = document.querySelector("#codigopostal");  // elemento <input>
var input_text = input.value;                                 // texto contido no <input>
var cp_semtraco = input_text.replace(/-/, "");

Saliento a importância de perceber a diferença entre input_element e input_text nesse exemplo (que são, respectivamente, um Element e uma string).

Tenta novamente para ver se já conseguiste resolver o problema.

Edited by pwseo
highlight, typo
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.