我试图通过Java中的正则表达式过滤器只允许某些单词,即:
Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\.-_]{1," + s.length() + "}$");
但我发现它允许通过140公里/小时,因为没有处理正斜杠。理想情况下,不应该允许这个词。
有人可以建议修复我当前的版本吗?
我是regexp的新手,并没有特别完全遵循它。
regexp在utils类方法中如下:
public static boolean checkStringAlphaNumericChars(String s) {
s = s.trim();
if ((s == null) || (s.equals(""))) {
return false;
}
Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\.-_]{1," + s.length() + "}$");
// Pattern p = Pattern.compile("^[a-zA-Z0-9_\\s]{1," + s.length() + "}");
Matcher m = p.matcher(s);
if (m.matches()) {
return true;
}
else {
return false;
}
}
我想允许带下划线,空格,句号,减号的字符串。并确保接受带有字母数字(如123.45或-500.00)的字符串,但不接受5,000.00。
答案 0 :(得分:4)
是因为连字符在你的字符集中倒数第二,因此定义了从'.'
到'_'
的范围,其中包括'/'
?
试试这个:
Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\._-]$");
此外,NullUserException是正确的,因为不需要{1," + s.length() + "}
。您使用'^'
开始表达并以'$'
结束表达的事实将确保使用整个字符串。
最后,您可以使用\w
代替[a-zA-Z_0-9]
,将您的表达简化为"^[\\w\\s\\.-]$"
答案 1 :(得分:1)
你可以使用
public static boolean checkStringAlphaNumericChars(String s) {
return (s != null) && s.matches("[\\w\\s.-]+");
}
s
进行null
时,短路空检查会确保.matches()
不是\w
。[A-Za-z0-9_]
查找字母数字加上下划线。 tchrist也将是第一个指出这比+
^
确保您至少有一个字符(即:字符串不为空)$
尝试将模式与整个字符串相匹配,因此无需使用.matches()
和.
。