вы забыли про def
Misha v.3 04.03.2008 12:10
объект void имеет не все методы, умеющиеся у строки. это сделано специально, чтобы не было собразна использовать конструкции, подобные вашим, т.к. они работают существенно медленнее, чем проверка на "определённость".
в вашем случае нужно написать примерно так:
^if(
def $form:email
&& ^Lib:isEmail[$form:email] # правильно вам сказали что проверка на @ не достаточна
&& (
!def $checkemail.email
|| ^form:email.lower[] eq ^checkemail.email.lower[]
)
){
введённый адрес коректен и не используется
}{
введенный адрес не корректен или уже используется
}
но это плохой метод.
я также не считаю, что заниматься сравнением адресов, приведённых к нижнему регистру -- хороший подход. уже упомянутый вариант проверки уникальности средствами БД мне нравится и я его использую (правда в качестве избыточного поля, unique "индекс" на котором занимается этим, чтобы оставлять введённый пользователем email как есть. в oracle можно и без избыточного поля, просто создать нужный constraint).
в любом случае проверку на существование адреса лучше вынести в отдельный метод, и там делать всё необходимое (не забыв про удаление начальных и конечных пробельных символов).
кстати эту проверку можно делать средствами mysql и без unique индексов: SELECT COUNT(*) FROM table WHERE email = '$form:email' вернёт не 0 даже если в БД есть email в другом регистре (столбец email в таблице не должен иметь флаг BINARY, посмотрите в его документации, и не забудьте про индекс для ускорения поиска).