Ayub Begimkulov - уроки по JS
3.11K subscribers
29 photos
212 links
По вопросам и деловым предложениям писать на @ayub_begimkulov
Download Telegram
Всем привет!

В данный момент работаю над немного странной задачей, есть корявый компонент, который одновременно делает и стилизацию текста, и переводы.

А приложение находится на стадии, когда еще не все переведено + текста некоторые приходят с бека.

Тут понятный флоу был бы такой - компонент <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
Всем привет!

Работаю сейчас над фичой, когда нужно у пользователя дополнительно просить имя на латинице, если вдруг он написал его на удобном ему (не латинском) языке.

Казалось бы, все просто. Проверил регуляркой, что все символы подходят, если нет - то показываешь другой скрин и просишь написать еще имя на латинице.

Что-то типа такого:


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
👍4915🔥1🎉1👌1💯1🍓1