Символы Unicode, которые могут использоваться для обманывания строкового сортировщика?

Я бы сделал так:

contact = new FormControl('', [Validators.required, Validators.pattern("^[0-9]{10,12}$")]);

Регулярное выражение: ^[0-9]{10,12}$

Где,

[0,9]   - Accept 0 to 9 numbers
{10,12} - Range

StackBlitz [ 118]

6
задан Chris Charabaruk 30 September 2008 в 05:19
поделиться

2 ответа

Пространство нулевой ширины (U+200B) должно, вероятно, сделать то, что Вы хотите. От спецификации Unicode:

Пространство Нулевой ширины. SPACE НУЛЕВОЙ ШИРИНЫ U+200B указывает на возможность разрыва строки, за исключением того, что она не имеет никакой ширины. Пробелы нулевой ширины предназначаются, чтобы использоваться на языках, которые не имеют никакого видимого межсловного интервала для представления возможностей разрыва строки, таких как тайский язык, кхмерский язык и японский язык.

Должен быть в большинстве шрифтов, с которыми Вы сталкиваетесь, но YMMV.

5
ответ дан 17 December 2019 в 02:35
поделиться

Лично, я просто предпочитаю использовать основной/вторичный ключ сортировки. Это менее топорно, и легко реализовать в типичном запросе SQL (ORDER BY column_a, column_b). Отредактированный для добавления: В Php Вы могли использовать usort(array, comparisonFunction) с пользовательской функцией сравнения для добавления дополнительной логики для сортировки, если Вы не можете использовать SQL для добиваний цели.

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

Основанные на Unicode взломы будут зависеть в большой степени от того, какие шрифты используются, какое сопоставление/порядок сортировки локали Вы используете и можете произвести нежелательные побочные эффекты на клиентах, которыми Вы не управляете (различные браузеры, различные ose, различные клиентские локали). Большинство "непечатных" символов приводит к "неизвестному символу" при отображении в системах без поддержки их, которая обычно похожа на пустой квадрат. Существуют некоторые символы нулевой ширины, используемые для языков как арабский язык, но они не должны влиять на сортировку кроме приложений с очень извращенной поддержкой Unicode.

1
ответ дан 17 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: