Показать сообщение отдельно
  #11 (permalink)  
Старый 19.03.2019, 01:37
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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
Ответить с цитированием