Как записать совпадения, исключая из пробела последовательность символов пробела ('')? - PullRequest
0 голосов
/ 13 февраля 2012

У меня сейчас проблема с моим проектом grails, я хотел написать совпадения, которые бы наилучшим образом соответствовали допустимым символам для моих полей ввода.Я написал соответствия, которые выдают сообщение об ошибке, если входные символы содержат один пробел., Но больше не работают, если ввод содержит серию пробелов.Это мой код:

newPassword nullable: false, minSize: 8, matches: /[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)~!@#%&-=]*/, blank: false, notEqualToAnyProperty:['username', 'emailAddress'],validator: { value, obj ->
           (obj.currentPassword != value && value != '')
        }

Это примеры входных данных:

1) 'rain drop' - мои совпадения работают, он возвращает сообщение об ошибке о том, что ввод содержит недопустимый символ.

2) '' - серия пробелов;моя программа возвращает сообщение об ошибке, которое должно отображаться для пустого ограничения вместо отображения сообщения об ошибке для моего ограничения совпадений, а именно: «вход содержит недопустимый символ», поскольку ввод не соответствует допустимым символам ввода.

Любая помощь от вас, ребята?Спасибо!

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Вам не нужно добавлять какие-либо теги begin (^) или end ($) к вашему регулярному выражению, так как ограничение matches пытается сопоставить весь ввод String с шаблоном, таким образом, ваш первый тест корректно завершается с ошибкой ограничение.

Для вашего второго теста, где вводом является только серия пробелов ' ', ограничение matches никогда не будет выполнено. И blank, и nullable являются ограничениями, которые могут блокировать выполнение других ограничений в случае их сбоя. Ограничение matches не будет работать в вашем случае, потому что ограничение blank возвращает ошибку при вводе всех пробелов.

0 голосов
/ 13 февраля 2012

Попробуйте совпадения: /[0-9a-zA-Z_[]\\^\$.\|\?*+()~!@#%&-=]+$/

Я просто добавил доллар в конце и изменил звезду на плюс.Доллар означает конец строки.Возможно, совпадение возвращает true, потому что первая часть строки действительно совпадает.

Причина, по которой я изменил звезду на плюс, заключается в том, что * соответствует нулю или больше.Это случай в вашей пустой строке.Для + требуется один или несколько.

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

...