Skip to content

Instantly share code, notes, and snippets.

@utilmind
Last active April 24, 2019 13:08
Show Gist options
  • Save utilmind/c78e98f23ff0cba6073d8df4b9bc3228 to your computer and use it in GitHub Desktop.
Save utilmind/c78e98f23ff0cba6073d8df4b9bc3228 to your computer and use it in GitHub Desktop.
Правило милозвучності в строках
/* This code make for Ukrainian language only.
Перетвоює пару В-У в строках відповідно до правила милозвучності української мови.
Перетворює «в» на «у» чи навпаки, залежно від контексту (наявності голосних-приголосних поруч).
Фаворит Експертів в номінації --> Фаворит Експертів у номінації
Фаворит Успіху у номінації --> Фаворит Успіху в номінації
*/
function mielophone($s, $l = false) {
global $lang;
if (!$l) $l = $lang;
if ($l != 'ua') return $s;
return preg_replace('/([аеиоуюяєіїАЕИОУЮЯЄІЇ])((<[^>]+?>)*?)((\s|&nbsp;|&#160;|\x{00A0}|<br\s*\/?>+)((<[^>]+?>)*?)у(\s|&nbsp;|&#160;|\x{00A0})([^вВ]))/u', '$1$2$5в$8$9',
preg_replace('/([^аеиоуюяєіїАЕИОУЮЯЄІЇ])((<[^>]+?>)*?)((\s|&nbsp;|&#160;|\x{00A0}|<br\s*\/?>+)((<[^>]+?>)*?)в(\s|&nbsp;|&#160;|\x{00A0})([^уУ]))/u', '$1$2$5у$8$9',
preg_replace('/(\s|&nbsp;|&#160;|\x{00A0}|<br\s*\/?>+)в(\s|&nbsp;|&#160;|\x{00A0})([вВ])/u', '$1у$2$3',
preg_replace('/(\s|&nbsp;|&#160;|\x{00A0}|<br\s*\/?>+)у(\s|&nbsp;|&#160;|\x{00A0})([уУ])/u', '$1в$2$3', $s))));
}
@utilmind
Copy link
Author

This is unicode-friendly version. Legacy version, only for Windows-1251 encoding was following:

return preg_replace('/([аеиоуюяєіїАЕИОУЮЯЄІЇ])((<[^>]+?>)*?)((\s|&nbsp;|&#160;|<br\s*\/?>+)((<[^>]+?>)*?)у(\s|&nbsp;|&#160;+)([^вВ]))/', '$1$2$5в$8$9',
       preg_replace('/([^аеиоуюяєіїАЕИОУЮЯЄІЇ])((<[^>]+?>)*?)((\s|&nbsp;|&#160;|<br\s*\/?>+)((<[^>]+?>)*?)в(\s|&nbsp;|&#160;+)([^уУ]))/', '$1$2$5у$8$9',
       preg_replace('/(\s|&nbsp;|&#160;|<br\s*\/?>+)в(\s|&nbsp;|&#160;+)([вВ])/', '$1у$2$3',
       preg_replace('/(\s|&nbsp;|&#160;|<br\s*\/?>+)у(\s|&nbsp;|&#160;+)([уУ])/', '$1в$2$3', $s))));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment