Question: I have this line of code:

```
if self.include?("van " || "de " || "von ")

```

why doesn't the block included after this line execute when the third alternative of the or-operator is true?

When my string is `"von wartburg"` the block doesn't execute, but when my string contains `"van"` or `"de"` then it does.

Answer: 
The 'or' will always evaluate "van " [because of how || works](https://stackoverflow.com/questions/2083112/difference-between-or-and-in-ruby).

Try using a regular expression like:

```
self =~ /^(van\ |de\ |von\ )/

```
Well it doesn't work for "de " either

```
2.3.0 :004 > "van test".include?("van " || "de " || "von ")
 => true
2.3.0 :005 > "de test".include?("van " || "de " || "von ")
 => false
2.3.0 :006 > "von test".include?("van " || "de " || "von ")
 => false

```

When you run `String#include?("van " || "de " || "von ")`
you pass only one argument to the function: `"van " || "de " || "von "`.

Boolean OR (`||`) will return the first element of the list that evaluates to true. So this is strictly identical to `String#include?("van ")`.

I know only two ways to do what you were trying to do in just one line :

* You can make a table of substrings to test and use `any?` over it

`["van ", "de ", "von "].any? { |s| string.include?(s) }`
* Or you can use a regex (in which the or operator (`|`) does exactly what you want)

`/van |de |von / =~ string`