【问题标题】:regular expression (for 3 words) with alphanumeric with all special chars except with % -带有字母数字的正则表达式(用于 3 个单词),带有除 % - 之外的所有特殊字符
【发布时间】:2021-08-08 21:31:37
【问题描述】:

带有字母数字和所有特殊字符的正则表达式,除了 % - 在单词中。

它是用连字符分隔的 3 个单词。第一个和第二个单词可以允许除 % - 第三个词只有数字

第一个词

  1. 不能为空(即不是简单的空白)。但它可以允许中间有空格。
  2. 不能包含 % 和 -
  3. 长度必须是 1 到 10

第二个字

  1. 不能为空(即不是简单的空白)。但它可以允许中间有空格
  2. 不能包含 % 和 -
  3. 长度必须是 1 到 12

第三个字

  1. 不能为空(即不是简单的空白)
  2. 只允许数字
  3. 长度必须为 4 到 9

尝试这种方式(作为正则表达式),但这也允许 %。

[[^%\-\s]]{1,10}[-]{1}[[^%\-\s]]{1,12}[-]{1}[\d]{4,9}  

允许的字符串:

"1sAS-c$AS-01238"
"t t-c:t-012345678"
"t$t-c 2:t-012345678"

不允许的字符串:

"1sA%S-c$AS-01238"   (because this contains % in the first word)
" -c:t-01235678"     (because this contains only space in the first word)
"t$t- -01234578"     (because this contains only space in the 2nd word)
"t-$t-check-012378"  (because this contains more hypens)

上述模式的输入字符串(itemValue)示例,应为 false:test%t1z

        Pattern pattern = Pattern.compile(regexStr);
        Matcher matcher = pattern.matcher(itemValue);

        if(matcher.matches()){
            flag = true;
        }

【问题讨论】:

    标签: java regex


    【解决方案1】:

    你可以使用

    String regexStr = "(?!\\s+-)[^%-]{1,10}-(?!\\s+-)[^%-]{1,12}-\\d{4,9}";
    

    请参阅regex demo

    详情

    • \A - 字符串的开头(当正则表达式与 matches() 一起使用时是隐式的)
    • (?!\s+-) - 紧靠右边,不应有一个或多个空格,然后是 - 字符
    • [^%-]{1,10} - 除了%- 之外的一到十个字符([^%\n-] 不允许在演示中匹配换行符)
    • - - 一个连字符
    • (?!\s+-) - 紧靠右边,不应有一个或多个空格,然后是 - 字符
    • [^%-]{1,12} - 除了%- 之外的一到十二个字符
    • - - 一个连字符
    • \d{4,9} - 四到九位数字
    • \z - 字符串结尾(当正则表达式与matches() 一起使用时是隐式的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2013-04-04
      • 1970-01-01
      • 2018-12-17
      • 2011-02-20
      相关资源
      最近更新 更多