regular matches first expressions example ios regex string swift

ios - matches - Swift regex: ¿una cadena coincide con un patrón?



swift 4 regular expression example (4)

En Swift, ¿cuál es una forma sencilla de ver si una cadena coincide con un patrón?

Ejemplos de pseudocódigo:

if string matches pattern ... if string =~ pattern ...

(He leído los documentos de Swift y no he visto una capacidad de expresión regular. He leído acerca de cómo agregar un nuevo operador =~ , lo cual es una buena idea más compleja de lo que me gustaría porque es para un proyecto de enseñanza. intente rangeOfString pero rangeOfString el error: ''String'' no tiene un miembro ''rangeOfString''. Estoy buscando una solución Swift, es decir, no estoy escribiendo NSRegularExpression. No necesito hacer nada con los datos del resultado del partido.)


Esto devolverá si una cadena coincide con un patrón

p.ej. matchesPattern (texto: "sd56Yz", patrón: "[a-zA-Z0-9] +") verdadero

p.ej. matchesPattern (texto: "sd56 $ Yz", patrón: "[a-zA-Z0-9] +") falso

func matchesPattern(text: String?, pattern: String?) -> Bool { guard hasValue(text) && hasValue(pattern) else { return false } let range = text!.rangeOfString(pattern!, options: .RegularExpressionSearch) guard range != nil else { return false } let rangeString = text?.substringWithRange(range!) return areEqual(text, string2: rangeString) }


Las soluciones mencionadas anteriormente ya no me funcionaron, así que estoy publicando mi solución aquí (usé una extensión para String):

extension String { func matches(_ regex: String) -> Bool { return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil } }

Ejemplo:

if str.matches("^[a-zA-Z0-9._-]{1,30}$") { //... }


Para obtener la sintaxis por la que realmente pregunta, puede definir fácilmente un nuevo operador que envuelva la funcionalidad NSString puenteada:

infix operator =~ {} func =~(string:String, regex:String) -> Bool { return string.rangeOfString(regex, options: .RegularExpressionSearch) != nil } "abcd" =~ "ab*cd" "abcd" =~ "abcde+"


Solución Swift versión 3:

if string.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil ...

Solución Swift versión 2:

if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ...

Ejemplo: ¿esta cadena contiene dos caracteres de la letra "o"?

"hello world".rangeOfString("o.*o", options: .RegularExpressionSearch) != nil

Nota: Si ''String'' does not have a member ''rangeOfString'' el mensaje de error ''String'' does not have a member ''rangeOfString'' , agregue esto antes: import Foundation . Esto se debe a que Foundation proporciona los métodos NSString que se conectan automáticamente a la clase Swift String.

import Foundation

Gracias a Onno Eberhard por la actualización de Swift 3.