Есть ли проблема в моем триггере?

Ваш код просто скремблирован. Ответ довольно прост.

Just go to **Build** --> **Clean Project**.

Это должно сделать трюк.

Я использую Android Studio 3.0.1 .

1
задан Diep Thanh Tu 27 March 2019 в 14:49
поделиться

2 ответа

Обновление:

Не имеет отношения к проблеме ... но имеет отношение к практике.

В общем, по возможности избегайте использования ключевых слов в качестве имен таблиц / столбцов.

0
ответ дан Merujsx 27 March 2019 в 14:49
поделиться

Вы можете протестировать регулярное выражение в клиенте MySQL, не используя триггер:

mysql> select 'user@example.com' REGEXP '^[^@]+@[^@]+\.[^@]{2,} 

Это ожидаемо, но как насчет того, чтобы мы дали ему недействительный адрес электронной почты?

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,} 

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 1 | +-------------+

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 1 | +-------------+

Это ожидаемо, но как насчет того, чтобы мы дали ему недействительный адрес электронной почты?

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,} 

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 1 | +-------------+

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

0
ответ дан Bill Karwin 27 March 2019 в 14:49
поделиться
Другие вопросы по тегам:

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