我有一个基本的正则表达式来检查字符串是否至少有一个数字 -
if (!("^(?=.*[0-9])".toRegex().matches(registerInput.input))) {
// Warn user
}
但是,即使使用 input 123,它也会失败并进入// Warn user部分。
我使用了在线验证工具,我的正则表达式似乎没有任何问题。请问有什么帮助吗?
我不熟悉 kotlin,但我查看了 kotlin 正则表达式,看看您是否真的需要将正则表达式锚定到字符串的开头。
该match方法的描述是:
指示正则表达式是否匹配整个输入。
对于您的示例,这将不正确。看起来containsMatchIn是一个更好的选择:
if (!("[0-9]".toRegex().containsMatchIn(registerInput.input))) {
// Warn user
}
如果您只是在搜索匹配项,则无需将正则表达式锚定到字符串的开头,或使用花哨的前瞻组或类似的东西。
按照 SpoonMeiser 的回答,如果您添加使整个输入匹配所需的内容,则肯定的前瞻测试将匹配:
if (!("^(?=.*[0-9]).*$".toRegex().matches("123")))
因为^(?=.*[0-9]) 只匹配行的开头(不采用预读字符,或“消耗”)。
所以要匹配整行,只需在.*$后面添加。
当然,在这种情况下,这是矫枉过正的,SpoonMeiser 的回答要好得多。