Regex NSRegularExpression против NSPredicate - PullRequest
0 голосов
/ 21 мая 2018

Я до сих пор использовал функцию для проверки формата электронной почты и пароля

func isRegexValid(string:String,regex:String) -> Bool {
   return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: string)
}

Я пытался проверить определенный шаблон и столкнулся с проблемами.Я искал строку с 4 разделителями-запятыми, за которыми следовал бы "ext"

^(.*,){4}ext 

Приведенная выше функция не справилась бы с этим, как и ожидалось, поэтому я попробовал альтернативу, которая хорошо работает

func isRegexValid2(string:String,pattern:String) -> Bool {
  let regex = try! NSRegularExpression(pattern: pattern, options: [])
  return regex.firstMatch(in: string, options: [], range: NSMakeRange(0, string.utf16.count)) != nil
}

Я хотел бы понять разницу между двумя вызовами регулярных выражений и следует ли нам избегать одного или другого.

1 Ответ

0 голосов
/ 21 мая 2018

NSPredicate очень отличается от NSRegularExpression.

NSPredicate используется для поиска и фильтрации среди объектов Какао.Его основная цель состоит в том, чтобы отфильтровать определенный объект среди коллекции объектов.У него совершенно другой синтаксис.

Как указано в документации Apple для NSPredicate

Предикаты представляют логические условия, которые можно использовать для фильтрации коллекций объектов.

Для дальнейшего изучения вы можете увидеть Руководство по программированию предиката.

С другой стороны, NSRegularExpression - это класс, который используется для компиляции регулярных выражений, которые затем применяются.* unicode.

Класс NSRegularExpression поддерживает стандартное регулярное выражение ICU, определенное в http://userguide.icu -project.org / strings / regexp

Надеюсь, это прояснится.

...