当前位置: 首页 > 知识库问答 >
问题:

Java正则表达式的最大长度与一个连字符

祁兴运
2023-03-14

我需要根据给定条件验证输入,

-总长度必须为20个字符-前五个位置必须是字母-剩余的应该是数字,但必须存在一个连字符(-),该连字符只能出现在数字之间。我喜欢正则表达式

([a-zA-Z]){5}[0-9]+([-]){15} 

但它也允许在结尾使用连字符,甚至可以不使用连字符。

共有2个答案

楚俊迈
2023-03-14

只需在此处添加非正则表达式透视图:

if (str.length() != 20) {
  return false;
}
for (int i = 0; i < 5; ++i) {
  if (!Character.isAlphabetic(str.charAt(i)) {
    return false;
  }
}
boolean hyphenFound = false;
for (int i = 5; i < 20; ++i) {
  char ch = str.charAt(i);
  if (ch == '-') {
    hyphenFound = true;
  } else if (!Character.isDigit(ch) && !Character.isAlphabetic(ch)) {
    return false;
  }
}
return hyphenFound;
斜瑞
2023-03-14

您可以使用

^[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+$

请参阅正则表达式演示。

详情:

  • ^-匹配字符串的开头

如果使用<代码>。matches(),可以省略外部锚点。

请参阅Java测试:

String pat = "[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+"; 
System.out.println("abcde123456-89012345".matches(pat));   // true
System.out.println("abcde-12345689012345".matches(pat));   // false
System.out.println("abcde12345689012345-".matches(pat));   // false
System.out.println("abcde12345689012345-12".matches(pat)); // false
 类似资料:
  • 我有一个正则表达式,最多允许6个小数(“.”是小数分隔符) 我还想设置最大长度条件,以便用户只能输入12位数字,最大长度应排除“.”我如何使用正则表达式做到这一点。

  • 我不确定这是否可以使用正则表达式。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。 我的数据库(postgresql)接受为15,6(最多15位,最多6位小数),因此如果我有10位整数,我可以有5位小数。小数分隔符被忽略。 我目前有一个正则表达式(逗号是小数分隔符): 它不验证总长度,只验证左侧的数字。但由于用户也可以键入点(千位分隔符),我有一个怪物:

  • 我想验证一个数字最大长度为13、小数点为2的货币字符串。我用逗号作为十进制分隔符,用句点作为千位分隔符。 我有一个正则表达式: For sintax有效,但不适用于最大长度。我需要在这个正则表达式中添加什么? 例如,这些字符串必须有效: 这些必须是无效的:

  • 问题内容: 我一直认为,Java的regex-API(以及与此相关的许多其他语言)中的后置断言必须具有明显的长度。因此,STAR和PLUS量词在内部回顾中是不允许的。 优秀的在线资源regular-expressions.info似乎证实了我的一些假设: “ […] Java通过允许有限重复而向前迈进了一步。你仍然不能使用星号或加号,但是可以使用问号和花括号以及指定的max参数。Java认识到有限

  • 我有以下正则表达式: 这允许: 开头可选 然后是数字、点、逗号、圆括号、破折号和空格。 除此之外,我需要确保数字和加号(如果存在)的长度在9到15之间(所以我不计算符号之外的任何特殊字符)。 最后一个条件是我有问题的地方。 有效输入: 358(9)1234567 无效输入: 3.5 8.9,1-2(3)4.5,6.77777(33个字符,只有20个计数字符(数字和加号)太多) 如果可能的话,使用正

  • 我正在尝试构建一个正则表达式,它接受具有以下条件的域名: 允许DNS名称(仅允许连字符、句点和字母数字字符)最多255个字符 连字符只能出现在字母之间 应该以字母开头,以字母结尾。它至少有3个字符(字母和句点必填,连字符可选)。 周期前标签的长度应为63 可能的情况: a、 b.c a-a.b 不该通过的案子 a-b q wert q wert q wert q wert q wert q wer