Сообщение от MC-XOBAHCK
|
То есть эмодзи это цифры?
|
Но если только в квадратик обвести цифру, то можно так сказать 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣
/\d/ означает /[0-9]/
/\D/ означает /[\u0000-\u002f\u003a-\uffff]/, т. е. все кодовые точки в диапазоне с U+0000 по U+FFFF кроме тех, что находятся с U+0030 по U+0039.
Поскольку 1️⃣ 2️⃣ 3️⃣ и т. д. технически состоят из числа(с U+0030 по U+0039), U+FE0F VARIATION SELECTOR-16 и U+20E3 COMBINING ENCLOSING KEYCAP, то /\D/ способен понизить «эмоциональность» чисел!
alert("0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣".replace(/\D/g, ""))
Поскольку кодовые точки начиная с U+10000 представлены как сурргатные пары /[\ud800-\ud8ff][\udc00-\udfff]/, то не-цифра находится так... /[\ud800-\ud8ff][\udc00-\udfff]|[\u0000-\u002f\u003a-\uffff]/
Ваш пример...
<input>
<script>
const input = document.querySelector("input");
input.addEventListener("input", () => {
input.value = input.value.replace(/[\ud800-\ud8ff][\udc00-\udfff]|[\u0000-\u002f\u003a-\uffff]/g, "");
})
</script>
Выражение /[\ud800-\ud8ff][\udc00-\udfff]|[\u0000-\u002f\u003a-\uffff]/ слишком запутанно, может это можно как-то упростить? Что-бы можно было написать примерно так /\D/.
Как сказать-то... The "u" flag to the rescue!
Флаг "u" понимает, что суррогатные пары нужно воспринимать как один символ! /\D/u
Ваш пример...
<input>
<script>
const input = document.querySelector("input");
input.addEventListener("input", () => {
input.value = input.value.replace(/\D/gu, "");
})
</script>
Если вы хотите писать красивые и читаемые регулярные выражения и вы используете исключающие диапазоны, то вам всегда нужен флаг "u", если только вы не собираетесь вручную задавать диапазон суррогатных пар.
Сообщение от MC-XOBAHCK
|
А тут вместо гавняшки кракозябы вылазят.
|
Да, странно, до сих пор не исправили! 😕 Хотя я уже поднимал эту тему, и даже намекнул, в чём проблема!
https://javascript.ru/forum/site/666...propustil.html