Pregunta

Quiero crear una prueba que devuelva verdaderas o falsas para el manejo del correo electrónico.

Por ahora, si la dirección de correo electrónico comienza con R+, entonces es cierto, de lo contrario es falso. Esto ayudará a nuestro servidor a ignorar mucho del spam con el que nos golpearon.

Ejemplos:

r+kldslkadslkadslk@site.com .. true
r+123123312@site.com .. true
vigraaaa@site.com .. FALSE

¿Cuál es la forma más eficiente de manejar esto con Rails/Ruby/Regex?

Gracias

META

Es un revestimiento en rieles/rubí con:

ABORT if XXXXX == 0
¿Fue útil?

Solución

Esto coincidirá:

/^r\+.*@site.com$/

Ejemplos:

>> 'r+kldslkadslkadslk@site.com' =~ /^r\+.*@site.com$/ #=> 0
>> 'vigraaaa@site.com' =~ /^r\+.*@site.com$/ #=> nil

Dado que todo lo que no es nil o false Es verdad en Ruby, puedes usar este Regex en una condición. Si realmente quieres un booleano, puedes usar el !! modismo:

>> !!('vigraaaa@site.com' =~ /^r\+.*@site.com$/) #=> false
>> !!('r+kldslkadslkadslk@site.com' =~ /^r\+.*@site.com$/) #=> true

Otros consejos

Si estás en Rails, ¿hay un inicio_with? Método en cadenas:

"foo".starts_with?('f') # => true
"foo".starts_with?('g') # => false

Fuera de los rieles, los reglas son una solución razonable:

"foo" =~ /^f/ # => true
"foo" =~ /^g/ # => false

Debido a que Ruby usa la verdad en las declaraciones IF, si termina usando Regexes, puede usar el valor de retorno para cambiar:

if "foo" =~ /^f/
  puts "Was true!"
else
  puts "Was false!"
end

Si está escribiendo un método y desea devolver un resultado booleano, siempre puede usar el truco de doble bang:

def valid_email?
  !!("foo" =~ /^f/)
end

Rubular (Rubular.com) es un buen sitio para probar Ruby Regexes antes de 1.9. (1.9 Regexes agregó cosas como LookAhead.)

Si no quieres usar un "!!" operador:

!!("foo" =~ /^f/)

Podría usar un operador ternario (podría parecer más obvio):

"foo" =~ /^f/ ? true : false

Puedes usar el '===' Operador también

/f/ === 'foo' #=> true

/f/ === 'bat' #=> false

Nota: La parte regex está a la izquierda:

/ Your_regex/ === 'Your_string'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top