Модификатор необходим для правильной обработки кодированного ввода utf-8. Шаблон типа \ xC1 должен соответствовать символу Unicode U + 00C1 (À). Когда вы кодируете Á в utf-8, вы получаете \ xC3 \ x81, поэтому \ xC1 не совпадает. Модификатор "u" заставляет алгоритм использовать utf-8, поэтому он совпадает.
В основном, когда вы работаете с текстом в кодировке utf-8, это то, что произойдет:
<?php
var_dump(preg_match('/\xC1/u', 'Á'));
// => int(1), matches
var_dump(preg_match('/\xC1/', 'Á'));
// => int(0), doesn't match
?>
В вашем случае первое регулярное выражение [^ \ x80- \ xF7] не соответствует ни одному (не ascii) тексту в кодировке UTF-8 из-за способа работы UTF-8. Второе выражение соответствует символам Юникода вне диапазона U + 0080 - U + 00F7, поэтому оно пропускает все кириллицу, греческий, арабский, иврит, ...