为什么某些正则表达式不能用于java.util.regex.Pattern

时间:2019-08-22 10:16:14

标签: regex kotlin

当前,我正在研究与BLE通讯相关的应用程序之一,其中BLE设备以JSON格式发送数据。我有一个要求,以确保在传递给调用者方法之前,接收到的数据应为JSON格式。

因此,我创建了一个JSON验证程序,该程序将验证收到的响应应具有预期的字段名以及JSON对象和数组符号。这是JSONValidator Kotlin代码,它正在测试JSON对象和数组符号。

class JSONValidator: StringValidator() {

  private val jsonArray = "(^\\[|]\$)"
  private val jsonObject = "([{}])"
  private val jsonArrayAndObject = "(^\\[\\{|}]\$)"

  override fun isStringValid(s: String?): Boolean {
        return if (s == null || s.isEmpty()) {
            false
        } else {
            doesPacketContainJson(s)
        }
    }

  private fun doesPacketContainJson(s: String): Boolean {
        return Regex(jsonObject).containsMatchIn(s) ||
               Regex(jsonArray).containsMatchIn(s) ||
               Regex(jsonArrayAndObject).containsMatchIn(s)
    }
}

JSONValidator测试类

class JSONValidatorTest {

    private val packetValidator: StringValidator = JSONValidator()

    // Other Test cases

    @Test
    fun `validate contains json`() {
        val partialJson1 = "{"
        val partialJson2 = "}"
        val partialJson3 = "[{"
        val partialJson4 = "]}"
        val partialJson5 = "]"

        //Issue: These test cases always failed
        assert(packetValidator.isStringValid(partialJson1))
        assert(packetValidator.isStringValid(partialJson2))
        assert(packetValidator.isStringValid(partialJson3))
        assert(packetValidator.isStringValid(partialJson4))
        assert(packetValidator.isStringValid(partialJson5))
    }
}

我在以下站点上对正则表达式进行了交叉验证,并且在该站点上工作正常。我希望我做对了。 :

我做了google,但是找不到有关我的用例的任何帮助。任何人都可以对这个问题有任何经验或想法吗?预先感谢。

0 个答案:

没有答案