用于简单FEN验证的正则表达式



我正在寻找验证国际象棋FEN字符串,我正在为它工作的正则表达式。我希望只实现非常简单的验证。以下是我希望与正则表达式匹配的规则:

  • 正好7 "/"字符
  • 字符串的开始和结束不能为"/">
  • 在斜杠之间必须是1-8之间的数字或大写或小写字母PNBRQK

匹配示例
rnbqkbnr/pppppppp 8/8/8/8/pppppppp rnbqkbnr

不匹配示例
rnbqkbnr/pppppppp/8/8/8/8/pppppppp/rnbqkbnr/
/pppppppp/8/8/8/pppppppp/rnbqkbnr/
rnbqkbnr/pppppppp/8/8/8/10/pppppppp/rnbqkbnr
rnbqkbnr/Z/8/8/8/pppppppp/rnbqkbnr
rnbqkbnr

目前,我已经能够实现7 "/">

/^(?:[^/]*/){7}[^/]*$/gm

我不确定如何实现其余的RegEx不是我的强项。

这应该能奏效:(通过所有测试)

/^(?:(?:[PNBRQK]+|[1-8])/){7}(?:[PNBRQK]+|[1-8])$/gim

您所需要的只是对您后面的字符使用正匹配,而不是"not斜杠"。关键加法是一个或多个PNBRQK为1-8之间的数字的非捕获组。相同的组在表达式的末尾重复。

哦,我还为不区分大小写的匹配添加了i标志。

/^([1-8PNBRQK]+/){7}[1-8PNBRQK]+$/gim

/gim=g全局,caseimultiline .

我在https://regexr.com/上得到了上述工作-这是我最喜欢的解决正则表达式问题的地方之一(但我知道网上还有许多其他好的资源)。

希望对你有帮助。

最新更新