Поэтому у меня есть некоторые предложения, которые я вставляю в базу данных с некоторыми процессами автоматической коррекции. Следующее предложение:
$sentence = "Is this dog your's because it can't be mine";
И следующий код, чтобы загладить каждое слово, но убедитесь, что он не использует сжатие (например, не):
str_replace( "'S", "'s", preg_replace( "/(\w+)n'T?/", "$1n't", ( preg_replace( "/\b[az]/e", 'strtoupper("$0")', ucwords($sentence) ) ) ) );
При эхо, результат выглядит следующим образом:
Is This Dog Your's Because It Can't Be Mine
Это то, что я хочу сделать, однако, что он вводит в мою базу данных MySQL:
Is This Dog Your's Because It Can'T Be Mine
Я понятия не имею, почему это происходит … Я предполагаю, что я что-то испортил.
Разумеется, вы должны использовать ucwords()
, но так вы бы делали это с регулярным выражением:
echo preg_replace_callback('/(?<=\s|^)[az]/', function($match) { return strtoupper($match[0]); }, $sentence);
Он гарантирует, что каждому нижнему регистру предшествует пробел (или начало предложения) с помощью утверждения lookbehind, прежде чем он будет изменен на верхний регистр.
Вы, вероятно, ищете ucwords
вместо ( Demo ):
$sentence = "Is this dog your's because it can't be mine"; echo ucwords($sentence); # Prints "Is This Dog Your's Because It Can't Be Mine"