QML TextField проверяет список адресов электронной почты [дубликат]

Мне кажется, что нарезка - это не столько проблема, которая отличается от того, когда ваши собственные классы и программы плохо архивируются / разработаны.

Если я передаю объект подкласса в качестве параметра для метод, который принимает параметр суперкласса типа, я должен, конечно, знать об этом и знать внутренне, вызываемый метод будет работать только с объектом суперкласса (aka baseclass).

Мне кажется, необоснованное ожидание того, что предоставление подкласса, где запрашивается базовый класс, каким-то образом приведет к конкретным результатам подкласса, вызовет проблему разрезания. Его либо плохой дизайн при использовании метода, либо недостаточная реализация подкласса. Я предполагаю, что это обычно результат жертвовать хорошим дизайном ООП в пользу целесообразности или повышения производительности.

5
задан ΩmegaMan 11 September 2013 в 18:48
поделиться

4 ответа

Попробуйте следующее:

^[-\w\s]+(?:,[-\w\s]*)*$

Использование ^ и $ гарантирует, что мы проверим все значение и не просто найдем совпадение где-то внутри.

Первый класс символов [-\w\s]+ позволяет использовать один или несколько буквенно-цифровых символов, пробелов или знаков пропуска. Черта должна идти сначала в скобках класса.

Вторая группа допускает ноль или более повторений с разделительными запятыми. Он заключен в неконвертируемые круглые скобки, небольшая оптимизация производительности: (?: … )*

Примечания:

  • Это выражение допускает пустые записи, такие как A,B,,D. Если вы не хотите этого допускать, измените второй-последний * на +.
  • Сокращение \w позволяет подчеркнуть. Чтобы предотвратить это, замените их на A-Za-z0-9.
18
ответ дан Jay 21 August 2018 в 03:23
поделиться
  • 1
    Я пробовал это, и он отлично работал, поэтому спасибо за помощь! – C Szymaszek 11 September 2013 в 20:02

Использовать классы символов.

^([0-9A-Za-z -]+)(,[0-9A-Za-z -]+)*$

Обратите внимание, что \w содержит символы подчеркивания, поэтому я расширяю его до буквенно-цифровых диапазонов.

Благодаря @Jay для указания отсутствующие якоря.

1
ответ дан Andrew Cheong 21 August 2018 в 03:23
поделиться
  • 1
    @Jay - Я бы тебя, я бы прокомментировал, & quot; Действительный ответ тоже, но не забывайте, что вы можете привязать ваше регулярное выражение! & Quot; ИМХО, это гораздо более конструктивный, чем просто компромисс с контрпримером, который, похоже, предназначен для дискредитации, а не для выяснения. – Andrew Cheong 11 September 2013 в 17:36
  • 2
    Извинения, acheong87. По моему опыту, комментарий встречается с обновлением, а затем я удаляю комментарий. – Jay 11 September 2013 в 18:10

Попробуйте следующее:

[-\w\s]+(,[-\w\s]+)*

[-\w\s] означает символ, пробел или дефис.

Обычно символ слова включает _, поэтому вы можете захотеть заменить что с A-Za-z0-9, если вы хотите предотвратить это.

[-A-Za-z0-9\s]+(,[-A-Za-z0-9\s]+)*
2
ответ дан Dukeling 21 August 2018 в 03:23
поделиться
  • 1
    Это будет соответствовать недопустимым входам, таким как !@#$%^&*()0, – Jay 11 September 2013 в 17:00
  • 2
    @Jay Основываясь на вашем ответе, кажется, вы предположили, что search сделано, а не match. Я принял последний. У вас тоже будет работать, но у вас будут избыточные символы для match. Я понимаю, что некоторые языки могут поддерживать только один из них, и я не знаю, что использует SobiPro, поэтому он действительно может быть search, хотя мое (возможно, неверное) предположение, основанное на вопросе, заключается в том, что регулярное выражение работает, за исключением -, поэтому он использует / поддерживает match, поскольку регулярное выражение не содержит ^ или $. – Dukeling 11 September 2013 в 17:11
  • 3
  • 4
    @Jay Я думаю, вы, возможно, неправильно поняли мой комментарий, или я неправильно понял ваш второй. Для разработки - Java, например, имеет функцию matches, которая сравнивает всю строку с регулярным выражением. Если такая функция используется, ^ и $ не требуются. Java также имеет функцию find, для которой требуются ^ и $. – Dukeling 11 September 2013 в 17:56
  • 5
    Спасибо за разъяснение, Дюкелинг. Я не слышал о том, как язык делает это различие. – Jay 11 September 2013 в 18:15

Для этого можно использовать класс символов :

[\w\s-]+(,[\w\s-]*)*

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

Если ваш валидатор не заставляет регулярное выражение всегда соответствовать всем полям ввода, вам может понадобиться anchor , окружая его ^ в начале и $ на конец.

1
ответ дан Tim Pietzcker 21 August 2018 в 03:23
поделиться
  • 1
    @Jay: Зависит от того, как применяется правило проверки. Некоторые правила привязаны к началу и концу строки автоматически. Но я должен признать, что я не знаю, как это делает SobiPro. – Tim Pietzcker 11 September 2013 в 17:48
Другие вопросы по тегам:

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