StringContainsQ And

StringContainsQ[{"abcd", "cdab", "acdb", "abdc"},
   ("ab" ~~ ___ ~~ "cd")|( "cd" ~~ ___ ~~ "ab")]

{True, True, False, False}

Also

And @@@ Transpose[StringContainsQ[{"abcd", "cdab", "acdb", "abdc"}, #]&/@ {"ab", "cd"}]

{True, True, False, False}

And @@@ Outer[StringContainsQ,{"abcd", "cdab", "acdb", "abdc"}, {"ab","cd"}]

{True, True, False, False}


StringContainsQ[{"abcd", "cdab", "acdb", "abdc"}, RegularExpression["(?=.*ab)(?=.*cd)"]]

{True, True, False, False}

(See Achieving logical “and” with Look-aheads (ie in regular expressions) and this SO answer).


strings = {"fcdeab", "abcdef", "cdefab", "acfdbe", "efabdc"};
joins = StringJoin /@ Partition[#, 2, 1] & /@ Map[Characters, strings];
{"ab", "cd"} == Intersection[#, {"ab", "cd"}] & /@ joins

{True, True, True, False, False}