不应该满足的,空格我先前只校验的是\s半角!!!
问题:我前端使用textarea输入框输入,问题出现在ios输入空格后,此时后台正则如下,满足了,为什么?
后端的验证如下:
// 后台校验正则
Pattern p0 = Pattern.compile("^[a-zA-Z0-9\\u4e00-\\u9fa5\\.,\\/\\-\\\\)\\(\\s\\:\\+'\\?\\|]+$");
// 满足条件报错
!p0.matcher(xxx).matches()
前端andriod输入空格是可以通过这个校验的,ios就会出现问题,不满足这个正则出现报错了?
后台解决方案:
可能是因为iOS输入空格时,它的Unicode编码与其他平台输入空格的Unicode编码不同。您可以使用Java的Unicode解码器来查看输入的空格字符的Unicode编码:
String s = " "; StringBuilder builder = new StringBuilder(); for (char c : s.toCharArray()) { builder.append(String.format("\u%04x", (int) c)); } System.out.println(builder);
这将输出空格字符的Unicode编码,例如:\u0020。您可以将这个编码与您的正则表达式中的空格字符比较,以确定是否有差异。如果是,您可以修改正则表达式以支持不同的空格字符编码。
前端的处理方法如何
您可以尝试使用JavaScript进行前端验证,可能会更容易处理iOS输入空格的问题。以下是一个示例,如果输入的字符串不符合正则表达式,则会提示错误信息:
var inputStr = document.getElementById("inputId").value;
var pattern = /^[a-zA-Z0-9\u4e00-\u9fa5.,\/\-\\)\(\s\:\+'\?\|]+$/; // 正则表达式
if(!pattern.test(inputStr)) {
alert("输入格式不正确!");
}
此外,您还可以尝试使用第三方库,例如jQuery Validation Plugin,它提供了丰富的验证规则和错误提示功能。以下是一个示例:
<form id="myForm">
<textarea id="inputId" name="input" required></textarea>
<input type="submit" value="提交">
</form>
$("#myForm").validate({
rules: {
input: {
required: true,
pattern: /^[a-zA-Z0-9\u4e00-\u9fa5.,\/\-\\)\(\s\:\+'\?\|]+$/
}
},
messages: {
input: {
required: "请输入内容",
pattern: "输入格式不正确"
}
}
});
在这个示例中,我们使用了jQuery Validation Plugin来验证输入框中的内容。我们添加了一条自定义规则,即使用正则表达式来验证输入内容。如果输入内容不符合正则表达式,将显示自定义错误消息。