1

我有一个基本的正则表达式来检查字符串是否至少有一个数字 -

if (!("^(?=.*[0-9])".toRegex().matches(registerInput.input))) {
     // Warn user
}

但是,即使使用 input 123,它也会失败并进入// Warn user部分。

我使用了在线验证工具,我的正则表达式似乎没有任何问题。请问有什么帮助吗?

4

2 回答 2

2

我不熟悉 kotlin,但我查看了 kotlin 正则表达式,看看您是否真的需要将正则表达式锚定到字符串的开头。

match方法的描述是:

指示正则表达式是否匹配整个输入。

对于您的示例,这将不正确。看起来containsMatchIn是一个更好的选择:

if (!("[0-9]".toRegex().containsMatchIn(registerInput.input))) {
    // Warn user
}

如果您只是在搜索匹配项,则无需将正则表达式锚定到字符串的开头,或使用花哨的前瞻组或类似的东西。

于 2021-07-08T09:22:27.337 回答
1

按照 SpoonMeiser 的回答,如果您添加使整个输入匹配所需的内容,则肯定的前瞻测试将匹配:

if (!("^(?=.*[0-9]).*$".toRegex().matches("123")))

因为^(?=.*[0-9]) 只匹配行的开头(不采用预读字符,或“消耗”)。

所以要匹配整行,只需在.*$后面添加。

当然,在这种情况下,这是矫枉过正的,SpoonMeiser 的回答要好得多。

于 2021-07-08T09:48:32.483 回答