【问题标题】:Regex with all special symbols带有所有特殊符号的正则表达式
【发布时间】:2015-12-23 15:36:48
【问题描述】:

我需要只允许拉丁字符、数字和所有其他符号(但不允许空格)的正则表达式

谢谢!

更新:

private boolean loginPassHasCorrectSymbols(String input){
        if (input.matches("[A-Za-z0-9\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\>\=\?\@\[\]\{\}\\\^\_\`\~]+$")){
            return true;
        }
        return false;
    }

【问题讨论】:

  • 当您说“特殊符号”时,您是指所有非字母数字字符的basic Latin 字符吗?
  • 所有可以从键盘输入的符号,但我认为你是对的)
  • 如果您只需要保护西里尔字母,为什么不使用(?U)^[^\\s\\p{IsCyrillic}]*$?试试input.matches("(?U)[^\\s\\p{IsCyrillic}]*")
  • @stribizhev 索引 3 附近的正则表达式模式中的语法错误:(?U)[^\s\p{IsCyrillic}]*
  • @stribizhev U_ILLEGAL_ARGUMENT_ERROR ((

标签: android regex


【解决方案1】:

平滑的 Kotlin 解决方案,允许带有一些默认符号的英文字母。不允许使用西里尔字母或任何其他语言符号。

//Allows english with usual symbols 
private fun hasNonAllowedSymbols(input: String) : Boolean {
    val regex = "[a-zA-Z0-9\\s-#,/~`'!@$%^&*()_+={}|;<>.?:\"\\[\\]\\\\]*"
    val pattern = Pattern.compile(regex)
    return !pattern.matcher(input).matches()
}

【讨论】:

    【解决方案2】:

    要查找除空格以外的任何符号,您可以使用此代码。希望对你有用

    public static boolean hasAnySymbolExceptWhitespace(String string){
        return Pattern.matches("(?=.*[^a-zA-Z0-9] ).*", string);
    }
    

    【讨论】:

      【解决方案3】:

      我这样做了,它对我有用。

      您可以通过在 Edittext 上提及它来阻止 whitespace,或者您也可以通过务实地阻止 editetext.addtextChangeListner。

      1>

      android:digits="0,1,2,3,4,5,6,7,8,9,*,qwertzuiopasdfghjklyxcvbnm,_,-" 
      

      2>

      etNewPassword.addTextChangedListener(new TextWatcher() {
                  @Override
                  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
      
                  }
      
                  @Override
                  public void onTextChanged(CharSequence s, int start, int before, int count) {
      
                      if (etNewPassword.getText().toString().contains(" ")) {
                          etNewPassword.setText(etNewPassword.getText().toString().replace(" ", ""));
                          int iLength = etNewPassword.getText().toString().length();
                          etNewPassword.setSelection(iLength);
                      }
                  }
      
                  @Override
                  public void afterTextChanged(Editable s) {
      
                  }
              });
      

      如果有任何问题,请告诉我。

      【讨论】:

        【解决方案4】:

        我希望我都得到了。

        "[A-Za-z0-9\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\>\=\?\@\[\]\{\}\\\\\^\_\`\~]+$"
        

        编辑:我忘记了在 Java 中,正则表达式也是字符串,因此您实际上需要使用另一个 \ 转义字符串中给出的每个 \。我希望我现在没有错过任何一个。

        "[A-Za-z0-9\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\>\\=\\?\\@\\[\\]\\{\\}\\\\\\^\\_\\`\\~]+$"
        

        【讨论】:

        • @LeoCHan:我猜你更了解 Python,对吧?你不需要$
        • @stribizhev 我想我在 Java 和 Python 方面都相当不错。毕竟,Java 是我的第一个 :) 但是在原始帖子中,OP 在其原始正则表达式的末尾有一个 $,这让我认为他想要一个 $ 来标记一行的结尾。
        • @LudoBagman 我刚刚添加了更多反斜杠,希望我能正确地转义所有内容。
        • 这里没有符号“\\!\\” - 它有效)我怎样才能添加这个符号?
        • 只是在黑暗中拍摄,但请检查添加更多反斜杠是否可行,使其成为\\!\\\"。所以对于\\\",你有2个反斜杠来得到一个\` and another backslash to get "`。如果它有效,请告诉我,以便我更新我的答案。
        【解决方案5】:

        除了空格之外的所有内容怎么样?

        "^\S+$"
        

        【讨论】:

        • 不)因为,在这种情况下我需要保护西里尔符号)
        • 嗯,西里尔字母不是要求的一部分,因为我摸索了它。我对此没有经验,但对此有所了解:)。你可能会从this 得到一些东西,但我什至不知道如何自己测试它......祝你好运。
        猜你喜欢
        • 2020-03-29
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2015-05-26
        • 1970-01-01
        相关资源
        最近更新 更多