正则表达式验证csv字符串

Olav Gulbrandsen Blaaflat:

我在javaFX中有一个TextField,其中的背景颜色会根据内容的有效与否而相应地更改。

有效:

987654321 1
987654321 21
0101 9 1
1701 91 1 2
4101 917 1 0 43
0801 9 178 2 0
0111 9 1 084 0

无效:

0101 9 1 0 1 0
3124
0314 9

基本上:

  • 仅数字
  • 第一组4或9位数字
  • 如果第一组9位数->总共只有两组
  • 如果第一组4位数字->总共三,四或五组
  • 组二和三位数字1-9999
  • 组四和五位数字0-9999

现在,将这些(有效)行之一视为一个“ Ident”。

当前的正则表达式为:

final String base = "(\\d+\\s+\\d+)|(\\d+\\s+\\d+\\s+\\d+(\\s+\\d+)?(\\s+\\d+)?)|(\\d+\\s+\\d+\\s+\\d+)|(\\d+\\s+\\d+\\s+\\d+\\s+\\d+)|(\\d+\\s+\\d+\\s+\\d+\\s+\\d+\\s+\\d+)";

Wich到目前为止效果很好,但是现在我想包含csv。因此,我只能输入以前使用的一个标识,也可以输入多个以逗号(,)分隔的标识,但总共不能超过五个。

我的尝试:

final String pattern = String.format("(%s,?\\s*){1,5}",base);

这使我可以输入以下内容:

  • 上面所有有效的行
  • 0101 9 1,0101 9 2,0101 9 3
  • 0101 9 1,987654321 21,0101 9 3,0101 9 4

而且,如果我输入了5个以上的标识,它将正确地变为无效。但是,如果我输入了无效的标识0101 9 1 1 1 1 1 1 1 1 1 1,它将仍然有效。

有什么建议?:)

编辑:这是匹配的逻辑:

private final Predicate<String> typingPredicate = new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input.matches(pattern);
    }
};

textField.textProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observableValue, String previous, String current) {
        if (current != null) {
            if (StringUtils.isEmpty(current) || typingPredicate.apply(current.trim())) {
                textField.getStyleClass().removeAll("invalid");
            } else {
                textField.getStyleClass().add("invalid");
            }
        }
    }
});
安德烈·谢尔巴科夫(AndreyS Scherbakov):

正则表达式中的逗号是可选的,因为事实允许将“ 0101 9 1 1 1 1 1 1 1 1 1 1 1”自由地解析为两个或更多记录。

要解决此问题,您可能要求它要么是一个标识,要么是多个逗号分隔的标识:

final String pattern = String.format("(%s\\s*,\\s*){0,4}%s",base,base);

此外,我会建议让基地本身更严格的关于您输入的规则,但它似乎并没有被这个问题直接相关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式来验证包含字符串“=”和“〜”作为结束字符

用于验证字符串的正则表达式仅包含基于cookie的数据

去正则表达式字符串验证

正则表达式以验证Java中的导入字符串

Protobuf3:使用正则表达式进行字符串验证

正则表达式:“ ux / ui”字符串的智能正则表达式

使用正则表达式可以连续验证字符串吗

使用正则表达式验证字符串

正则表达式-创建验证以强制字符串包含2个以上的单词

通过正则表达式从正则表达式添加字符串

进行正则表达式以验证特定格式的字符串

正则表达式验证不解析字符串,如果PHP

正则表达式,用于使用某些条件验证字符串字段

字符串[01:3:14/1:8:20]的正则表达式验证

正则表达式验证10位全数字的字符的字符串

正则表达式:为字符串编辑正则表达式

用于验证字符串的正则表达式

使用Java和正则表达式验证字符串语言环境

正则表达式不是验证字符串

包含x或y位数字的输入字符串的Bean验证正则表达式

使用正则表达式验证字符串

Java正则表达式验证sql查询字符串包含SELECT和LIMIT

正则表达式验证输入字符串

如何创建正则表达式验证表达式以允许此字符串?

在 bash 中使用正则表达式进行字符串验证

正则表达式验证字符串是否是有效的 SQL 列名

验证字符串匹配正则表达式模式

Bash 正则表达式被视为字符串而不是正则表达式

使用正则表达式验证“abc=def,123,xyz”之类的字符串