¿Cómo determinar si hay una coincidencia y un retorno verdadero o falso en los rieles?
-
28-10-2019 - |
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
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'