我有一个输入字段,可以输入常规文本和sprintf标记.
例: some text here. %1$s done %2$d times
我如何验证sprintf部件,以便它们不可能出错%$1s
?文本是utf-8,据我所知,正则表达式只匹配latin-1字符.
www.regular-expressions.info没有列出/u
任何地方,我认为这用于告诉字符串是unicode.
是搜索整个输入字段字符串的最佳方法,%
或者$
如果找到,则应用正则表达式来验证sprintf部分?
我认为正则表达式将是: /%\d\$(s|d|u|f)/u
我最初使用Gumbo的正则表达式来解析sprintf指令,但在尝试解析像%1.2f这样的东西时我立即遇到了问题.我最终回到PHP的sprintf手册并根据其规则编写了正则表达式.到目前为止,我不是一个正则表达式专家,所以我不确定这是否是最干净的写作方式:
/%(?:\d+\$)?[+-]?(?:[ 0]|'.{1})?-?\d*(?:\.\d+)?[bcdeEufFgGosxX]/