Всем привет!
В данный момент работаю над немного странной задачей, есть корявый компонент, который одновременно делает и стилизацию текста, и переводы.
А приложение находится на стадии, когда еще не все переведено + текста некоторые приходят с бека.
Тут понятный флоу был бы такой - компонент
Но до меня все это перемешали в один компонент. Туда можно передать, как ключ перевода, так и сам текст.
Так там по мимо всего этого есть очень много другой странной логики, которую надо будет вынести/переделать.
Так вот, сейчас, чтобы была нормальная типизация у ключей, надо поправить часть с передачей plain текста (вынести это пока в отдельный проп и типизировать другой проп для передачи ключей).
В общем, думаю детали тут не так важны, и думаю без кода не особо понятно.
Но, в итоге usege’ев, не подходящих под новый интерфейс очень много (~230). И вот в таких случаях бывает очень полезно хорошо владеть regex.
Я далеко не мастер. Но более менее что-то понимаю.
И получается одной регуляркой сразу обновить через find+replace 10-30 usage’ев, что сильно упрощает процесс.
Конечно же, там не все так переделаешь. Но уже значительную часть смог.
Так вот, к чему это. Если пишите регулярки в приложении, постарайтесь не просто скопировать их со stack overflow, а понять, как это все работает.
Я за свои годы научился базе, которая очень часто выручает. Как и говорю, знаю только банальные вещи, но многие и этого не знают.
Так что в следующий раз прежде чем просто копипастить, уделите 5-15 мин на понимание.
Тут кстати могут помочь сайты типа https://regex101.com/.
Хорошего дня!
#devtips #regex
В данный момент работаю над немного странной задачей, есть корявый компонент, который одновременно делает и стилизацию текста, и переводы.
А приложение находится на стадии, когда еще не все переведено + текста некоторые приходят с бека.
Тут понятный флоу был бы такой - компонент
<Text />
отвечает за стилизацию, а переводы приходят из const t = useTranslations()
.Но до меня все это перемешали в один компонент. Туда можно передать, как ключ перевода, так и сам текст.
Так там по мимо всего этого есть очень много другой странной логики, которую надо будет вынести/переделать.
Так вот, сейчас, чтобы была нормальная типизация у ключей, надо поправить часть с передачей plain текста (вынести это пока в отдельный проп и типизировать другой проп для передачи ключей).
В общем, думаю детали тут не так важны, и думаю без кода не особо понятно.
Но, в итоге usege’ев, не подходящих под новый интерфейс очень много (~230). И вот в таких случаях бывает очень полезно хорошо владеть regex.
Я далеко не мастер. Но более менее что-то понимаю.
И получается одной регуляркой сразу обновить через find+replace 10-30 usage’ев, что сильно упрощает процесс.
Конечно же, там не все так переделаешь. Но уже значительную часть смог.
Так вот, к чему это. Если пишите регулярки в приложении, постарайтесь не просто скопировать их со stack overflow, а понять, как это все работает.
Я за свои годы научился базе, которая очень часто выручает. Как и говорю, знаю только банальные вещи, но многие и этого не знают.
Так что в следующий раз прежде чем просто копипастить, уделите 5-15 мин на понимание.
Тут кстати могут помочь сайты типа https://regex101.com/.
Хорошего дня!
#devtips #regex
❤25👍16💯1🍓1
Всем привет!
Работаю сейчас над фичой, когда нужно у пользователя дополнительно просить имя на латинице, если вдруг он написал его на удобном ему (не латинском) языке.
Казалось бы, все просто. Проверил регуляркой, что все символы подходят, если нет - то показываешь другой скрин и просишь написать еще имя на латинице.
Что-то типа такого:
Однако, тут есть проблема. Мы ведь проверяем на английский алфавит, а не на латинский (таких оказывается не мало).
Решением на бекенде было просто использовать пакет
Собственно, после небольшого ресерча нашел, что есть такая вещь, как unicode regular expressions.
В целом о возможности использовать unicode'ы в регулярках я знал, но не слышал о скриптах, блоках и категориях (что-то типа \w+ в обычной регулярке).
Так вот, оказалось можно проверить на символ из любого алфавите с помощью
А если нужен символ из латинского алфавита, то вот так -
Таких конструкций довольно много, подробнее можете почитать тут:
https://www.regular-expressions.info/unicode.html
#devtips #regex
Работаю сейчас над фичой, когда нужно у пользователя дополнительно просить имя на латинице, если вдруг он написал его на удобном ему (не латинском) языке.
Казалось бы, все просто. Проверил регуляркой, что все символы подходят, если нет - то показываешь другой скрин и просишь написать еще имя на латинице.
Что-то типа такого:
const nonEnglishLetters = /[^a-zA-Z]/;
if (nonEnglishLetters.test(name)) {
showEnglishNameScreen();
}
// do something else
Однако, тут есть проблема. Мы ведь проверяем на английский алфавит, а не на латинский (таких оказывается не мало).
Решением на бекенде было просто использовать пакет
unicodedata
. Похожие библиотеки есть на js, но весят они как 2 наших бандла, так как хранят инфу о всех символах.Собственно, после небольшого ресерча нашел, что есть такая вещь, как unicode regular expressions.
В целом о возможности использовать unicode'ы в регулярках я знал, но не слышал о скриптах, блоках и категориях (что-то типа \w+ в обычной регулярке).
Так вот, оказалось можно проверить на символ из любого алфавите с помощью
/\p{L}/u
.А если нужен символ из латинского алфавита, то вот так -
/\p{Script=Latin}/u
.Таких конструкций довольно много, подробнее можете почитать тут:
https://www.regular-expressions.info/unicode.html
#devtips #regex
👍49❤15🔥1🎉1👌1💯1🍓1