Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

184
Views
Coincide solo al final de la cadena

Me gustaría proteger el campo de email de la siguiente tabla:

 CREATE TABLE users ( email VARCHAR(255) NULL CHECK (email ~* '\A[^@]+@[^@]+\Z') );

Lo que me gustaría hacer es permitir cadenas como:

bob@ejemplo

Pero me gustaría evitar cadenas como:

bob@ejemplo\nfuu

Escuché que la restricción \Z permite cualquier carácter después de otra línea (con \n ).

De acuerdo con las mejores prácticas en expresiones regulares, \z es mejor que \Z ya que solo permite una línea, pero parece que PostgreSQL no lo admite . Y el $ no es mejor.

¿Soy cierto?

Editar:

Probé esto:

 CREATE TABLE users ( email VARCHAR(255) NULL CHECK (email ~* '\A[^@\n]+@[^@\n]+\Z') ); CREATE UNIQUE INDEX users__lower_case__email ON users(lower(email)); -- INSERT INTO users (email) VALUES ('\nfoo\n@\nbar\n');

Aparentemente, la restricción no funcionó: se agregó el correo electrónico incorrecto en la tabla.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Tenga en cuenta que las clases de caracteres negados coinciden con cualquier carácter excepto los definidos en el conjunto. Entonces, [^@] coincide con cualquier carácter excepto @ , incluidos los símbolos de nueva línea . Para excluir una nueva línea, simplemente agréguela a la clase.

Usar

 email ~* '\A[^@\n]+@[^@\n]+\Z'

Como \Z solo coincide solo al final de la cadena , no hay forma de que esta expresión regular pueda permitir una nueva línea en la entrada.

over 4 years ago · Santiago Trujillo Report

0

Le sugiero que revise mi publicación para conocer la forma correcta de almacenar una dirección de correo electrónico en PostgreSQL.

  • ¿Cuál es la mejor manera de almacenar una dirección de correo electrónico en PostgreSQL?

Aquí hay un código de ejemplo,

 CREATE EXTENSION citext; CREATE DOMAIN email AS citext CHECK ( value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' ); SELECT 'asdf@foobar.com'::email;

para tu mesa,

 CREATE TABLE users ( user_email email );
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!