目前我使用以下正则表达式来验证JSF中的textArea:
"^([a-zA-Z0-9]+[a-zA-Z0-9 ]+$)?"
它允许我有多个单词以及大写和小写字符,但仍然不够,我需要让它变得更好。它还应该只允许一些特殊字符。你有任何想法,我怎么能调整它能够:
- 允许以下4个字符,
.
;
:
- 还包括非英语字母表中的特殊字母,这是所需的字母:Đ
đ
Ž
ž
Ć
{{1 }} ć
Č
č
Š
我将我的网络应用程序配置为使用UTF-8,如果常规表达式只允许那些特殊字母,那就太好了,因为每次验证每个字段的编码都会减少。
答案 0 :(得分:4)
只需将它们添加到标有[]
"^([a-zA-Z0-9,.;:ĐđŽžĆćČ芚]+[a-zA-Z0-9 ,.;:ĐđŽžĆćČ芚]+$)?"
除了你的问题之外,还有一个关于性能改进的建议:第一部分可能是因为reg-exp可以从允许的字符之一开始,但是空格。由于这只是第一个字符的特殊情况,请删除+号。这样,它只匹配第一个字符。无论如何,成功的角色将与第二部分匹配。
"^([a-zA-Z0-9,.;:ĐđŽžĆćČ芚][a-zA-Z0-9 ,.;:ĐđŽžĆćČ芚]+$)?"
答案 1 :(得分:4)
如果特殊字符全部来自同一个unicode bock,则可以将它们与表达式\p{InGreek}
匹配,将Greek
替换为字符来自的块。您还可以使用负向lookbehind来防止匹配前导空格。这将使正则表达式:
^(?! )[\p{Alnum}\p{InLatinExtendedA},.;: ]+$
如果你不想在领先的空间上快速失败,正如你的评论所暗示的那样,你可以使用这个正则表达式修剪前导和尾随空格:
^\s*([\p{Alnum}\p{InLatinExtendedA},.;: ]+?)\s*$
第一个捕获组将是没有前导或尾随空格的有效字符串。