问题:我前端使用textarea输入框输入,问题出现在ios输入空格后,此时后台正则如下,满足了,为什么?
后端的验证如下:
// 后台校验正则
Pattern p0 = Pattern.compile("^[a-zA-Z0-9\\u4e00-\\u9fa5\\.,\\/\\-\\\\)\\(\\s\\:\\+'\\?\\|]+$");
// 满足条件报错
!p0.matcher(xxx).matches()
前端andriod输入空格是可以通过这个校验的,ios就会出现问题,不满足这个正则出现报错了?
码友来帮助下,辛苦啦
不知道你这个问题是否已经解决, 如果还没有解决的话:这个问题的原因是在iOS设备上,输入空格会被自动转换成不可见的特殊字符(例如
),而正则表达式中的\s
只能匹配标准的空格字符,无法匹配这些特殊字符,导致校验失败。
解决这个问题的方法是使用\p{Z}
的unicode属性,它可以匹配任何空白字符,包括标准空格和特殊字符。下面是优化后的正则表达式:
Pattern p0 = Pattern.compile("^[a-zA-Z0-9\\u4e00-\\u9fa5\\.,/-\\p{Z}\\':\\'+\\?|]+$");
使用优化后的正则表达式可以解决在iOS设备上输入空格导致校验失败的问题。