我有一个表单,想要将数据提交到数据库。这些数据是UTF8编码的。我遇到了匹配换行符的问题。我使用的模式类似于:
~^[\p{L}\p{M}\p{N} ]+$~u
这个模式在用户在文本框中输入换行符之前是有效的。我尝试在类内使用\p{Z}
,但没有成功。我还尝试过“s”,但也不起作用。
非常感谢您的任何帮助。谢谢!
我有一个表单,想要将数据提交到数据库。这些数据是UTF8编码的。我遇到了匹配换行符的问题。我使用的模式类似于:
~^[\p{L}\p{M}\p{N} ]+$~u
这个模式在用户在文本框中输入换行符之前是有效的。我尝试在类内使用\p{Z}
,但没有成功。我还尝试过“s”,但也不起作用。
非常感谢您的任何帮助。谢谢!
Unicode换行符是指紧接着回车后面的换行符,或任何具有垂直空白属性的字符。
但看起来您正在尝试匹配通用空格。在Java中,可以使用以下代码:
[\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000]
使用范围可以将其缩短为“仅”:
[\u000A-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]
\h
)和垂直空格(\v
),这可能与一般的空格(\s
)不同或相同。
看起来你也想匹配字母数字字符。
[\pL\pM\p{Nl}]
。\pN
,而通常是只有\p{Nd}
或者有时是[\p{Nd}\p{Nl}]
。[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]
——如果你的正则表达式引擎支持这些操作(Java的支持)。那就是在支持Unicode的正则表达式中\w
的作用(Java不支持)。在较旧版本的Perl中,你可能会将换行写成
(?:\r\n|\p{VertSpace})
(?:(?>\r\n)|\v)
这正是
\R
匹配。
Java 在这些方面非常笨拙。你必须写成
<br>
来表示换行。
(?:(?>\u000D\u000A)|[\u000A-\u000D\u0085\u2028\u2029])
当然,如果要将其作为字符串写入,则需要额外的反斜杠。
对于14个常见字符类正则表达式转义字符的其他Java等价物,使它们与Unicode配合使用,我在这个答案中提供。您可能需要在其他不足以识别Unicode的类似Java的正则表达式语言中使用它们。