Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Regex não reconhece acentos.

Efetuei as mudanças conforme orientado em aula para o regex, mas ao tentar salvar um pensamento que contenha acentuação não é permitido. Estou tentando salvar o pensamento: Quem sabe, muitas vezes não diz. E quem diz muitas vezes não sabe. Mas fica retornando a mensagem com erro, fiz o teste com o mesmo pensamento, mas sem acentos (Quem sabe, muitas vezes nao diz. E quem diz muitas vezes nao sabe.) e ainda não permite. Fiz o teste sem acentos e sem pontos e vírgulas e ai sim ele permitiu. (Quem sabe muitas vezes nao diz E quem diz muitas vezes nao sabe)

Tentei buscar na internet em fóruns e no W3Schools, mas não consegui solucionar para que aceitasse. Alguém poderia me orientar: Segue o código do arquivo main.js

import ui from "./ui.js"
import api from "./api.js"

function removerEspacos(string) {
  return string.replaceAll(/\s+/g, '')
}

const regexConteudo = /^[A-Za-z\s]{10,}$/;

function validarConteudo(conteudo) {
  return regexConteudo.test(conteudo)
}

const regexAutoria = /^[a-zA-Z]{3,15}$/;

function validarAutoria(autoria) {
  return regexAutoria.test(autoria)
}

document.addEventListener("DOMContentLoaded", () => {
  ui.renderizarPensamentos()

  const formularioPensamento = document.getElementById("pensamento-form")
  const botaoCancelar = document.getElementById("botao-cancelar")
  const inputBusca = document.getElementById("campo-busca")

  formularioPensamento.addEventListener("submit", manipularSubmissaoFormulario)
  botaoCancelar.addEventListener("click", manipularCancelamento)
  inputBusca.addEventListener("input", manipularBusca)
})

async function manipularSubmissaoFormulario(event) {
  event.preventDefault()
  const id = document.getElementById("pensamento-id").value
  const conteudo = document.getElementById("pensamento-conteudo").value
  const autoria = document.getElementById("pensamento-autoria").value
  const data = document.getElementById("pensamento-data").value

  const conteudoSemEspacos = removerEspacos(conteudo)
  const autoriaSemEspacos = removerEspacos(autoria)

  if(!validarConteudo(conteudoSemEspacos)) {
    alert("É permitida a inclusão apenas de letras e espaços com no mínimo 10 caracteres.")
    return
  }

  if(!validarAutoria(autoriaSemEspacos)) {
    alert("A autoria deve conter o mínimo de 3 e o máximo de 15 caracteres e não é permitido a inserção de espaço.")
    return
  }

  if(!validarData(data)){
    alert("Não é permitido o cadastro de datas futuras. Selecione outra data.")
  }

  try {
    if (id) {
      await api.editarPensamento({ id, conteudo, autoria, data })
    } else {
      await api.salvarPensamento({ conteudo, autoria, data })
    }
    ui.renderizarPensamentos()
  } catch {
    alert("Erro ao salvar pensamento")
  }
}

function manipularCancelamento() {
  ui.limparFormulario()
}

async function manipularBusca() {
  const termoBusca = document.getElementById("campo-busca").value
  try {
    const pensamentosFiltrados = await api.buscarPensamentosPorTermo(termoBusca)
    ui.renderizarPensamentos(pensamentosFiltrados) 
  } catch (error) {
    alert("Erro ao realizar Busca.")
    
  }
  
}

function validarData(data) {
  const dataAtual = new Date() //caso não receba parâmetro ele passa a data atual
  const dataInserida = new Date(data)
  return dataInserida <= dataAtual
}
2 respostas
solução!

Olá, Karoline, como vai?

A questão com o seu regex é que ele não está preparado para lidar com caracteres acentuados e pontuações. Podemos fazer uma alteração na expressão para que possa permitir esses caracteres.

Você pode adicionar os seguintes elementos:

  • À-ÖØ-öø-ÿ: Inclui as letras com acentos, tanto maiúsculas quanto minúsculas.
  • .,!?()'":; : Adiciona os caracteres especiais como vírgula, ponto, exclamação, interrogação, parênteses, aspas simples, aspas duplas, dois-pontos e ponto e vírgula.

E o resultado é esse:

const regexConteudo = /^[A-Za-zÀ-ÖØ-öø-ÿ\s.,!?()'":;]{10,}$/

Demonstrando o uso de regex ao enviar uma frase que inclui caracteres especiais

Espero ter ajudado. Siga firme com os estudos e conte sempre com o fórum!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Obrigada, havia tentado algo similar que não tinha funcionado. Mas usei o exemplo que você compartilhou e consegui