Проверьте, если строка содержит любую подстроку в массиве в Ruby -- ruby поле с участием regex поле с участием substring пол Связанный проблема

Check if string contains any substring in an array in Ruby


41
vote

проблема

русский

Я использую библиотеку Tmail , а для каждого вложения в электронном письме, когда я делаю <код> attachment.content_type , иногда я получаю не только тип контента, но и имя. Примеры:

 <код> image/jpeg; name=example3.jpg  image/jpeg; name=example.jpg  image/jpeg; name=photo.JPG  image/png   

У меня есть массив действительных типов контента, как это:

 <код> VALID_CONTENT_TYPES = ['image/jpeg']   

Я хотел бы иметь возможность проверить, включен ли тип содержимого в любом из действительных элементов массива типов контента.

Что будет лучшим способом сделать это в Ruby?

Английский оригинал

I am using the Tmail library, and for each attachment in an email, when I do attachment.content_type, sometimes I get not just the content type but also the name. Examples:

image/jpeg; name=example3.jpg  image/jpeg; name=example.jpg  image/jpeg; name=photo.JPG  image/png 

I have an array of valid content types like this:

VALID_CONTENT_TYPES = ['image/jpeg'] 

I would like to be able to check if the content type is included in any of the valid content types array elements.

What would be the best way of doing so in Ruby?

        

Список ответов

0
 
vote
vote
Лучший ответ
 
<Р> Я думаю, что мы можем разделить этот вопрос на две части:
  1. Как чистой нежелательному данных
  2. Как проверить, если очистить данные достоверны
<Р> Первый хорошо ответил выше. Во-вторых, я хотел бы сделать следующее:
 <код> (cleaned_content_types - VALID_CONTENT_TYPES) == 0   
<Р> Прелесть этого решения заключается в том, что вы можете легко создать переменную для хранения нежелательных видов, чтобы перечислить их позже как в этом примере:
 <код> VALID_CONTENT_TYPES = ['image/jpeg'] cleaned_content_types = ['image/png', 'image/jpeg', 'image/gif', 'image/jpeg']  undesired_types = cleaned_content_types - VALID_CONTENT_TYPES if undesired_types.size > 0   error_message = "The types #{undesired_types.join(', ')} are not allowed" else   # The happy path here end   
 

I think we can divide this question in two:

  1. How to clean undesired data
  2. How to check if cleaned data is valid

The first is well answered above. For the second, I would do the following:

(cleaned_content_types - VALID_CONTENT_TYPES) == 0 

The nice thing about this solution is that you can easily create a variable to store the undesired types to list them later like this example:

VALID_CONTENT_TYPES = ['image/jpeg'] cleaned_content_types = ['image/png', 'image/jpeg', 'image/gif', 'image/jpeg']  undesired_types = cleaned_content_types - VALID_CONTENT_TYPES if undesired_types.size > 0   error_message = "The types #{undesired_types.join(', ')} are not allowed" else   # The happy path here end 
 
 
104
 
vote
<Р> Есть несколько способов сделать это. Вы можете проверить каждую строку, пока не будет найдено совпадение с помощью <код> Enumerable#any? < / код> :
 <код> str = "alo eh tu" ['alo','hola','test'].any? { |word| str.include?(word) }   
<Р> Хотя это может быть быстрее, чтобы преобразовать массив строк в Regexp:
 <код> words = ['alo','hola','test'] r = /#{words.join("|")}/ # assuming there are no special chars r === "alo eh tu"   
 

There are multiple ways to accomplish that. You could check each string until a match is found using Enumerable#any?:

str = "alo eh tu" ['alo','hola','test'].any? { |word| str.include?(word) } 

Though it might be faster to convert the array of strings into a Regexp:

words = ['alo','hola','test'] r = /#{words.join("|")}/ # assuming there are no special chars r === "alo eh tu" 
 
 
         
         
3
 
vote
<Р> Если <код> image/jpeg; name=example3.jpg это строка:
 <код> ("image/jpeg; name=example3.jpg".split("; ") & VALID_CONTENT_TYPES).length > 0   

I.e. пересечения (элементы, общие для двух массивов) из массива VALID_CONTENT_TYPES и <код> DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault()); String formattedDate = dateFormat .format(new Date()); 0 массив (в том числе типа) должно быть больше 0. <Р> Это, по крайней мере, один из <ет> много путь.

 

If image/jpeg; name=example3.jpg is a String:

("image/jpeg; name=example3.jpg".split("; ") & VALID_CONTENT_TYPES).length > 0 

i.e. intersection (elements common to the two arrays) of VALID_CONTENT_TYPES array and attachment.content_type array (including type) should be greater than 0.

That's at least one of many ways.

 
 
3
 
vote
<Р> Итак, если мы просто хотим существование матча:
 <код> DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault()); String formattedDate = dateFormat .format(new Date()); 1  
<Р> Если мы хотим совпадение это даст список совпадающих строк в массиве:
 <код> DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault()); String formattedDate = dateFormat .format(new Date()); 2  
 

So if we just want existence of a match:

VALID_CONTENT_TYPES.inject(false) do |sofar, type|      sofar or attachment.content_type.start_with? type end 

If we want the matches this will give the list of matching strings in the array:

VALID_CONTENT_TYPES.select { |type| attachment.content_type.start_with? type } 
 
 
2
 
vote
 <код> DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault()); String formattedDate = dateFormat .format(new Date()); 3  
 
# will be true if the content type is included     VALID_CONTENT_TYPES.include? attachment.content_type.gsub!(/^(image\/[a-z]+).+$/, "\1")  
 
 

Связанный проблема

0  Получите наименьшую подходящую строку из длинной строки  ( Get the smallest matching string from a long string ) 
Предположим, у меня есть строка <код> interpreter, interprete, interpret Теперь, что я хочу сделать, это получить самую маленькую подходящую строку из...

0  Oracle SQL сравнивает строки и найдите соответствующие подтругины  ( Oracle sql compare strings and find matching sub strings ) 
У меня есть метки, разделенные толстой кишки, связанные с двумя различными объектами в двух таблицах. Хотелось бы сделать подпиковую сопоставление для тегов и...

0  Nestes Msaccess SQL из запроса  ( Nestes msaccess sql from query ) 
У меня есть база данных MS Access со таблицей с именем событий <код> AlarmID | Model | Landscape | Date | EventHandle | EventDescription Содержание even...

1  Используйте YQL с подстрокой - до XPath  ( Use yql with substring before in xpath ) 
Я пытаюсь получить строку до «-» в пределах параграфа на HTML-странице, используя XPath и отправить его на YQL Например, я хочу получить дату из следующей с...

83  Как разделить строку в подстроки на iOS?  ( How to split string into substrings on ios ) 
Я получил <код> NSString с сервера. Теперь я хочу разделить его в подстроку, которая мне нужна. Как разделить строку? Например: Подстрока1: прочитать со ...

12  Как найти количество вхождений подстроки в строке VB.Net  ( How to find the number of occurrences of a substring within a string vb net ) 
. У меня есть строка (например: <код> "Hello there. My name is John. I work very hard. Hello there!" ), и я пытаюсь найти количество вхождений строки <код> "he...

1  Рассчитайте длину строки с помощью труб Yahoo  ( Calculate length of string using yahoo pipes ) 
Я использую трубы Yahoo, чтобы извлечь статьи из различных источников, включая Google, однако статьи из Google включают в себя заголовок и источник заголовка ...

0  Как найти конкретные подстроки (которые могут быть очень похожими) и делать разные вещи с ними в Java  ( How to find specific substrings that can be very similar and do different thin ) 
Я пишу программу, которая принимает в файл и извлекает данные из одной строки в файл. Я столкнулся с проблемой, когда я пытаюсь разделить подстроки в том, как...

0  Oracle Удалить часть строки после определенного вхождения символа  ( Oracle remove part of string after a specific occurrence of a character ) 
Я пытался получить строку перед предпоследним возникновением символа «_»: Например: <код> LORIK_BB_ID_FF_KKK_HUY_222_44 LUN_GGG_MAMA_FF_GG_GG_TT22_3 ...

0  Получите все после и до определенного персонажа в SQL [дубликат]  ( Get everything after and before certain character in sql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

4  Пересматривающая подсчет подстроки отсчитывает обновление после замены его с помощью «X»  ( Recomputing substring counts updating after replacing it with x ) 
Учитывая строку: <код> s = 'cdababef' Мы рассчитываем символ до и символ после с: <код> def per_window(sequence, n=1): """ From http://stackov...

0  Найти текст специфика в нескольких столбцах в Excel  ( Find specifc text in multiple columns in excel ) 
У меня есть формула, которая на некоторое время озадачила меня - я чувствую, что я близок, но решение уклоняется от меня, поэтому я поворачиваясь к вам волшеб...

0  Проблемы с нахождением подстроки с помощью скрипта оболочки  ( Trouble with finding substrings with shell script ) 
У меня есть файл отформатирован что-то вроде этого: <код> ./07/00-post.log:Referer: http://domain1.com/example/launch.jsp?BANKID=123&SOMEPARAM=123&... ./07/...

0  Подстрока перед функцией в XSLT 2.0  ( Substring before function in xslt 2 0 ) 
Мне нужна помощь со строковыми манипуляциями. Сценарий: <Код> <ADR_LINE>This is a sample text, to test adr-line.</ADR_LINE> Требование состоит в том, что...

-1  PHP сочетание двух ближайших слов в строке [закрыто]  ( Php combining two nearest words in a string ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

2  Извлечь подстроку из индекса 0 до поиска символа  ( Extract substring from index 0 up to searched character ) 
У меня есть объект называется <код> user . Я могу получить свое имя <код> user.name , и его значение имеет как имя, так и фамилия, такое как <код> Jon Doe . К...

-1  «Элиф». Заявление о неудачном строке для подстроки  ( Elif statement failing to a check string for a substring ) 
Очень короткая версия: мой <код> elif Заявление, которое предполагается, чтобы проверить, присутствует ли подстрока, говорит, что подстрока не присутствует...

1  Какой алгоритм поиска подстроки используется разными jres?  ( What substring search algorithm is used by different jres ) 
<Код> java.lang.String javadoc ничего не говорит о по умолчанию <код> indexOf(String) алгоритм поиска подстроки. Итак, мой вопрос - какие алгоритмы подстрок...

1  Самая длинная общая подстрока  ( Longest common substring ) 
У нас есть две строки <код> a и <код> b соответственно. Длина <Код> a больше или равно <кода> b . Мы должны выяснить самую длинную общую подстроку. Если ес...

3  C # Использование подстроки, как я могу извлечь эту строку?  ( C sharp using substring how do i extract this string ) 
Я хочу извлечь первую папку в URL ниже, в этом примере он называется «ExtractShishishisPername», но папка может иметь любое имя и быть любым длиной. С учетом ...

0  SQL Server Query - разделить строку на 3 части на основе 2 различных общих разделителей  ( Sql server query split a string into 3 parts based on 2 different common delim ) 
Я пытаюсь создать запрос, который может разделить комбинированные описания продуктов, цвета и размеры в их отдельные значения. У меня есть стол, полный описан...

2  Как я могу найти 8-битные подстроки в строках с значениями ASCII, превышающим 127?  ( How do i find 8 bit substrings in strings with ascii values exceeding 127 ) 
Я изо всех сил пытаюсь работать через проблему, я бегу, пытаясь работать с побитовыми подстроками в строках. В приведенном ниже примере эта простая небольшая ...

0  Вопросы с методом подстроки в C ++ [дубликат]  ( Issues with the substring method in c ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

-4  Java, проверка подстроки строки не «существует»  ( Java check is substring of string doesnt exist ) 
У меня есть цикл, который должен отделить слово в отдельные буквы ... это работает, но тогда, когда я постараюсь проверить, не существует ли подстрока, не сущ...

4  Stackoverflow при проверке ли одна строка содержится в другом  ( Stackoverflow when checking if one string is contained in another ) 
У меня в настоящее время есть метод, который должен принимать две строки, а затем проверять, существует ли одна строка в качестве подстроки в другой. Он не пр...

Связанный проблема

0  Получите наименьшую подходящую строку из длинной строки 
0  Oracle SQL сравнивает строки и найдите соответствующие подтругины 
0  Nestes Msaccess SQL из запроса 
1  Используйте YQL с подстрокой - до XPath 
83  Как разделить строку в подстроки на iOS? 
12  Как найти количество вхождений подстроки в строке VB.Net 
1  Рассчитайте длину строки с помощью труб Yahoo 
0  Как найти конкретные подстроки (которые могут быть очень похожими) и делать разные вещи с ними в Java 
0  Oracle Удалить часть строки после определенного вхождения символа 
0  Получите все после и до определенного персонажа в SQL [дубликат] 
4  Пересматривающая подсчет подстроки отсчитывает обновление после замены его с помощью «X» 
0  Найти текст специфика в нескольких столбцах в Excel 
0  Проблемы с нахождением подстроки с помощью скрипта оболочки 
0  Подстрока перед функцией в XSLT 2.0 
-1  PHP сочетание двух ближайших слов в строке [закрыто] 
2  Извлечь подстроку из индекса 0 до поиска символа 
-1  «Элиф». Заявление о неудачном строке для подстроки 
1  Какой алгоритм поиска подстроки используется разными jres? 
1  Самая длинная общая подстрока 
3  C # Использование подстроки, как я могу извлечь эту строку? 
0  SQL Server Query - разделить строку на 3 части на основе 2 различных общих разделителей 
2  Как я могу найти 8-битные подстроки в строках с значениями ASCII, превышающим 127? 
0  Вопросы с методом подстроки в C ++ [дубликат] 
-4  Java, проверка подстроки строки не «существует» 
4  Stackoverflow при проверке ли одна строка содержится в другом