php - 正则表达式中的加减 (±) 符号
问题描述
我需要生成一个验证 UTC 偏移量的正则表达式模式。这些通常格式化为UTC+05:30
或UTC-01:00
。匹配如下(允许空格)似乎很简单:
^UTC[ ]?[+\-±][ ]?[01][0-9]:[034][05]$
[注意:我根据@barman 的反馈更新了这个模式]
有一个写有密码的口袋UTC±00:00
。然而,正负号是把事情扔掉。以 PHP 为例:
echo preg_match("/^±$/","±");
echo preg_match("/^[±]$/","±");
echo preg_match("/^[\±]$/","±");
将返回true
第一场比赛,但false
其他两场比赛。
所以我的问题是,±
在正则表达式中是否需要特殊处理?我在文档中找不到对此符号的任何引用。谢谢。
解决方案
看起来@Barmar 可能解决了您遇到的第一个问题(匹配 UTC 字符串)。但是,要解释您所看到的内容:
preg_match("/^±$/","±"); // true
preg_match("/^[±]$/","±"); // false
preg_match("/^[\±]$/","±"); // false
该±
字符长两个字节,因此preg_match
将其解释为两个字符。为了以您期望的方式进行匹配,您必须使用/u修饰符。这告诉preg_match
将您的模式视为 utf-8,它将解释±
为单个字符而不是两个字符。
preg_match("/^[±]$/u","±"); // true
并包含一个与您的 UTC 样本匹配的示例:
// with the /u modifier (works as expected)
preg_match("/^UTC[ ]?[+\-±][ ]?[01][0-9]:[034][05]$/u", "UTC±05:30"); // true
// without the /u modifier (does not match)
preg_match("/^UTC[ ]?[+\-±][ ]?[01][0-9]:[034][05]$/", "UTC±05:30"); // false
推荐阅读
- asynchronous - 如何在不等待的情况下从同步方法调用中回调?
- reactjs - OfficeRuntime.auth.getAccessToken 在 PowerPoint online 中不起作用
- eclipse - 导入关键字机器人框架时的问题
- node.js - Vercel 错误 500 和意外的令牌 I 在 json 位置为 0
- mysql - 将 Mysql 导出到 Redis 并使用 Redis 搜索进行索引
- python - Hydra 的默认值列表中的插值原因和错误
- python - 删除零值并绘制分布 - Python (PANDAS)
- html - 使用 scss 访问组件的子类
- javascript - 致命错误:Scavenger:半空间复制分配失败
- javascript - 如何在子文件夹/子路径中运行 Express 应用程序