--- /dev/null
+/* @flow */
+"use strict";
+
+/**
+ * Checks if a string contains a value. The comparison value can be a string or
+ * an array of strings.
+ *
+ * Any strings starting and ending with `/` are ignored. Use the
+ * matchesStringOrRegExp() util to match regexes.
+ */
+module.exports = function containsString(
+ input /*: string*/,
+ comparison /*: string | Array<string>*/
+) /*: false | { match: string, pattern: string }*/ {
+ if (!Array.isArray(comparison)) {
+ return testAgainstString(input, comparison);
+ }
+
+ for (const comparisonItem of comparison) {
+ const testResult = testAgainstString(input, comparisonItem);
+ if (testResult) {
+ return testResult;
+ }
+ }
+ return false;
+};
+
+function testAgainstString(value, comparison) {
+ if (!comparison) return false;
+ if (comparison[0] === "/" && comparison[comparison.length - 1] === "/") {
+ return false;
+ }
+
+ if (value.indexOf(comparison) >= 0) {
+ return { match: value, pattern: comparison };
+ }
+
+ return false;
+}