Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java正则表达式中排除带正斜杠的单词_Java_Regex - Fatal编程技术网

在Java正则表达式中排除带正斜杠的单词

在Java正则表达式中排除带正斜杠的单词,java,regex,Java,Regex,我试图通过Java中的regexp过滤器只允许某些单词,即: Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\.-_]{1," + s.length() + "}$"); 但我发现它允许通过140km/h,因为正斜杠是不处理的。理想情况下,这个词不应该被允许 有人能建议对我的当前版本进行修复吗 我刚接触regexp,还没有完全了解它 regexp位于utils类方法中,如下所示: public static boolean checkStringAlp

我试图通过Java中的regexp过滤器只允许某些单词,即:

Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\.-_]{1," + s.length() + "}$");
但我发现它允许通过140km/h,因为正斜杠是不处理的。理想情况下,这个词不应该被允许

有人能建议对我的当前版本进行修复吗

我刚接触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的字符串,但不接受5000.00的字符串。

这是因为连字符在字符集中排在倒数第二位,因此定义了从
.
'.
的范围,其中包括
/'

试试这个:

Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\._-]$");
另外,NullUserException是正确的,因为不需要
{1,“+s.length()+”}
。表达式以
“^”
开头,以
“$”
结尾,这将确保整个字符串被使用


最后,您可以使用
\w
代替
[a-zA-Z_0-9]
,将表达式简化为
“^[\\w\\s\\.-]$”

是因为连字符在字符集中排在倒数第二位,因此定义了从
'.
'
的范围,其中包括
'/'

试试这个:

Pattern p = Pattern.compile("^[a-zA-Z0-9\\s\\._-]$");
另外,NullUserException是正确的,因为不需要
{1,“+s.length()+”}
。表达式以
“^”
开头,以
“$”
结尾,这将确保整个字符串被使用

最后,您可以使用
\w
代替
[a-zA-Z_0-9]
,将表达式简化为
“^[\\w\\s\\.-]$”

,您只需使用

public static boolean checkStringAlphaNumericChars(String s) { 
    return (s != null) && s.matches("[\\w\\s.-]+"); 
}
  • 短路空检查确保当您尝试对其执行
    .matches()
    时,
    s
    不为
    null
  • 使用
    \w
    查找字母数字加下划线。tchrist还将第一个指出这比
    [A-Za-z0-9.]
  • 最后的
    +
    确保您至少有一个字符(即:字符串不是空的)
  • 无需使用
    ^
    $
    ,因为
    .matches()
    尝试将模式与整个字符串匹配
  • 在字符类中也不需要转义点(
新演示:

您只需使用

public static boolean checkStringAlphaNumericChars(String s) { 
    return (s != null) && s.matches("[\\w\\s.-]+"); 
}
  • 短路空检查确保当您尝试对其执行
    .matches()
    时,
    s
    不为
    null
  • 使用
    \w
    查找字母数字加下划线。tchrist还将第一个指出这比
    [A-Za-z0-9.]
  • 最后的
    +
    确保您至少有一个字符(即:字符串不是空的)
  • 无需使用
    ^
    $
    ,因为
    .matches()
    尝试将模式与整个字符串匹配
  • 在字符类中也不需要转义点(


新的演示:

真的没有必要这样:
{1,“+s.length()+”}
那么,有什么可以替代它来保证字符串的每个字符都被正确解析呢?你在转义点什么?您没有使用什么
\w
?您指定了什么
{1,
?为什么要使用从点到下划线的所有代码点的范围来指定这49个代码点?为什么要使用代码单元的数量来指定代码点?当这些数字不匹配时,您会怎么做?&c&c&c&c&D!您想用简单的英语做什么,因为我们永远无法从您的模式中找出它?NullUserException是正确的,您可以将其替换为Kleene运算符“+”。由于您的下限当前为1,我假设您不希望允许长度为零的字符串(您可以使用“*”来实现)。此外,在使用
match()时,您不需要“^”和“$”
方法。它测试输入是否与正则表达式完全匹配。当使用
find()
逐步扫描字符串时,使用行标记非常有用。确实不需要这样:
{1,“+s.length()+”}
那么,有什么可以取代它来保证字符串的每个字符都被正确解析?你在转义点什么?你没有使用什么
\w
?你在指定什么
{1,
?为什么要使用从点到下划线的所有代码点的范围来指定这49个代码点?为什么要使用代码单元的数量来指定代码点?当这些数字不匹配时,您会怎么做?&c&c&c&c&D!您想用简单的英语做什么,因为我们永远无法从您的模式中找出它?NullUserException是正确的,您可以将其替换为Kleene运算符“+”。由于您的下限当前为1,我假设您不希望允许长度为零的字符串(您可以使用“*”来实现)。此外,在使用
match()时,您不需要“^”和“$”
方法。它测试输入是否与正则表达式完全匹配。当使用
find()
逐步扫描字符串时,使用行标记非常有用。我发现奇怪的是,如果删除{1,“+s.length()+”},以前的有效字符串现在将被拒绝。如果您找到
[^\w\s.-]
,它会使字符串无效。@Morgan先生-不要简单地删除它,用
+
替换它。我觉得奇怪的是,如果我删除了{1,“+s.length()+”},以前有效的字符串现在会被拒绝。如果你找到
[^\w\s.-]
,它会使字符串无效。@Morgan先生-不要简单地删除它,用
+
替换它。这很好。但它可以扩展到包括双筒名称,如fitzwilliam smythe或5000.00 as 500吗