Регулярное выражение для фильтрации похожих символов

0

Я пытаюсь построить регулярное выражение для реализации следующего ограничения:

Значение может иметь любую длину, но не может содержать одинаковые буквы/цифры, которые могут вызвать путаницу при печати. Например, 1 (числовой), я (верхний регистр латинского i) и l (нижний регистр Latin L) выглядят одинаково; могут быть и другие подобные примеры

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

Например: я мог бы иметь Linux1 но не LINUX1 или linux1

  • 0
    Я отредактировал ваш вопрос, чтобы сделать его более понятным; Надеюсь, это правда, что вы хотите сделать. Вам нужно решение с регулярным выражением для этого?
  • 0
    Да, извините, может быть, я должен был быть более ясным: это для тренировочного упражнения, а не для практического использования :)
Теги:

1 ответ

3
Лучший ответ

Я сомневаюсь, что регулярные выражения - это путь сюда, но если вам действительно нужно, вам, вероятно, придется обрабатывать их в каждом конкретном случае: (1I)|(I1)|([Ii][Ll])|([Ll][Ii]). Поэтому, если регулярное выражение будет соответствовать, вам придется отклонить строку. Рабочий пример регулярного выражения можно найти здесь.

В соответствии с вашими комментариями вы можете попытаться использовать что-то вроде этого: (1.*I)|(I.*1)|([Ii].*[Ll])|([Ll].*[Ii]). Рабочее регулярное выражение можно найти здесь. Это регулярное выражение также проверяет значения, которые считаются схожими.

  • 0
    Спасибо; однако, возможно, мне следовало бы быть более похожим: мне нужно отклонять строку во всех случаях, если присутствует пара этих отклоненных символов: например, ваше решение отклоняет 1I, но не отклоняет 1fdsafsI. Есть идеи? (Я думаю, что слышал о перспективах? Не уверен, что это может быть полезно здесь)
  • 0
    @Jackhardcastle: Не могли бы вы предоставить информацию о том, почему вы хотите отказаться от 1fdsafsI ?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню