求用于简易国际象棋FEN字符串验证的正则表达式
国际象棋FEN字符串简易验证正则方案
直接给出满足所有要求的正则表达式:
/^[PNBRQKpnbrqk1-8]+(?:\/[PNBRQKpnbrqk1-8]+){7}$/
规则对应拆解:
- 恰好7个"/":正则中的
(?:\/[PNBRQKpnbrqk1-8]+){7}是一个非捕获组,重复7次「斜杠+合法段」的结构,加上开头的[PNBRQKpnbrqk1-8]+,整体形成8个由7个斜杠分隔的合法段,正好对应FEN的8行结构。 - 首尾不能为"/":开头直接限定为合法字符集
[PNBRQKpnbrqk1-8]+,确保首字符不是斜杠;结尾以合法字符集收尾,最后一段没有尾随斜杠,自然避免了末尾出现斜杠的情况。 - 斜杠间内容合法:每一段的字符集
[PNBRQKpnbrqk1-8]严格限定为:- 大小写的
P(兵)、N(马)、B(象)、R(车)、Q(后)、K(王) - 1-8的数字(代表对应数量的空位)
这样就排除了Z这类非法字符,以及10这种多位数(因为正则匹配单个合法字符,10会被识别为1和0,其中0不在合法字符集内,所以会匹配失败)。
- 大小写的
测试示例:
- 匹配:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR - 不匹配:
/rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR(开头带斜杠)rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR/(末尾带斜杠)rnbqkbnr/pppppppp/10/8/8/8/PPPPPPPP/RNBQKBNR(含非法数字10)rnbqkbnr/pppppppp/Z/8/8/8/PPPPPPPP/RNBQKBNR(含非法字符Z)
内容的提问来源于stack exchange,提问作者Ammar Ahmed
相关产品推荐
相关产品推荐

