2011-09-09 18 views
18

Quiero crear una prueba que devuelva verdadero o falso para el manejo del correo electrónico.¿Cómo determinar si hay una coincidencia y un retorno verdadero o falso en los rieles?

Por ahora, si la dirección de correo electrónico comienza con r +, entonces es verdadera, de lo contrario es falsa. Esto ayudará a nuestro servidor a ignorar muchos de los SPAM con los que nos topamos.

Ejemplos:

[email protected] .. true 
[email protected] .. true 
[email protected] .. FALSE 

Cuál es la forma más eficiente de manejar esto con rieles/Ruby/expresiones regulares?

Gracias

META

es un revestimiento de rieles/rubí con:

ABORT if XXXXX == 0 

Respuesta

33

Esto corresponderá:

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

Ejemplos:

>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0 
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil 

Puesto que todo eso no es nil o false es Truthy en Ruby, puede usar esta expresión regular en una condición. Si realmente quieres un booleano puede utilizar el lenguaje !!:

>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false 
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true 
+0

Gracias, pero ¿cómo puedo hacer esto en rails/ruby ​​por lo que es ABORT si XXXXX == 0 – AnApprentice

+0

Intenté su última idea, que condujo a error de sintaxis , $ undefined inesperado, esperando ')' (SyntaxError) – AnApprentice

+0

Todavía no puede hacer que esto funcione, intenté si (params [: to] .to_s = ~ (/^r\+.*@site.com$/)) = = nil – AnApprentice

10

Si estás en rieles, hay una starts_with? Método de cuerdas:

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

Fuera de rieles, expresiones regulares son una solución razonable:

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

Debido Rubí utiliza truthiness en sentencias if, si lo hace terminar usando expresiones regulares, puede simplemente usar el regreso valor para cambiar:

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

Si estás escribiendo un método y desea devolver un resultado booleano, se puede usar siempre el truco doble explosión:

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

Rubular (rubular.com) es un buen sitio para probar las expresiones regulares de Ruby anteriores a la 1.9. (De 1,9 expresiones regulares añaden cosas como búsqueda hacia delante.)

+0

Fuera de los rieles también hay una cadena "start_with?" (Nota singular). –

+0

No estoy seguro de que me guste la idea starts_with, solo coincidiría con ry not r +, que sería mucho más útil contra los spammers – AnApprentice

+0

¿Por qué no podría hacer 'start_with? "r +" '? Quiero decir, usaría una expresión regular también para que coincida con algo antes de un '+', ¿pero start_with? coincidirá con lo que le des. –

8

Si no desea utilizar una "!!"Operador:

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

Se puede usar un operador ternario (fuerza parece más obvio):

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

Puede utilizar el '===' operador así

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

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

Nota: La parte de expresiones regulares está a la izquierda:

/YOUR_REGEX/=== 'YOUR_STRING'

Cuestiones relacionadas