我正在使用Javalin和Exposed ORM构建一个小型API。 我正在尝试在条件但条件抛出异常的情况下使用正则表达式,因为由于我的代码而执行的SQL查询似乎不完整(缺少模式)。
fun getUsersByFilter(filter: String): List<User> {
val regex = StringBuilder("/")
.append(filter.toLowerCase())
.append("/i")
.toString()
/**
* The .regexp(someString) method take a string as argument (a pattern)
*/
val users = transaction {
User.find{ Users.pseudo.regexp(regex) }.toList()
}
return users
}
Position : 141. Statement(s): SELECT users.id, users.pseudo, users.email, users."password", users.admin, users.created_at, users.updated_at FROM users WHERE users.pseudo REGEXP ?
org.jetbrains.exposed.exceptions.ExposedSQLException: org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « REGEXP »
Position : 141
SQL: [SELECT users.id, users.pseudo, users.email, users."password", users.admin, users.created_at, users.updated_at FROM users WHERE users.pseudo REGEXP ?]
有人可以帮我吗?
答案 0 :(得分:1)
好吧,我明白了。即使使用StringBuilder时,regex参数也已正确传递给查询(异常消息中的问号正好指向该参数...)。该错误来自PostgreSQL,因为PostgreSQL中根本不存在“ REGEXP”功能...
我终于使用了这段代码:
fun getUsersByFilter(filter: String): List<User> {
val regex = "%${filter.toLowerCase()}%"
val users = transaction {
User.find{ Users.pseudo.lowerCase().like(regex) }.toList()
}
return users
}
答案 1 :(得分:0)
在您的代码中,看起来好像您正在尝试通过将/
,模式和/i
分隔符+不区分大小写的标志连接在一起来从用户输入中创建正则表达式。
这是错误的,因为:
/
)来设置,或者更容易地使用内嵌修饰符(例如RegexOptions.IGNORE_CASE
)来设置。首先添加它,整个正则表达式将不区分大小写。Regex.fromLiteral
method。所以,我建议使用
(?i)