php - php preg_match 函数转义撇号
问题描述
在 php 中,我正在以如下方式验证字符串:
- 至少在字符长
- 仅包含字母数字加上符号破折号、下划线和美元符号 (- _ $)
所以我的结果代码是:
if(!preg_match("/[a-zA-Z0-9\-_\$]+/", $input))
abort(400);
// else continues
除了撇号字符 ' 和 " 之外,它工作得很好,如果字符串包含这两个字符之一,它应该无法通过验证,但这不是正在发生的事情。我认为我的正则表达式模式不是很好结构化,但我在这里找不到问题。
解决方案
您只检查字符是否存在于字符串中的任何位置(在本例中Hello
)。您需要使用字符串的开始(^
)和结束($
)进行正则表达式:
if (!preg_match("/^[a-zA-Z0-9\-_$]+$/", 'Hello"')) {
abort(400);
} else {
//continues
}
$
我应该在方括号内转义还是不转义?
在这种情况下,您不需要转义$
with \
。如果您需要正则表达式字符而不是正则表达式字符,则可以始终转义它们:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
推荐阅读
- docker - "不允许使用受限网络端口" (WebKitErrorDomain:103)
- c++ - 可以使用概念来限制值和类型吗?
- snowflake-cloud-data-platform - 更新数百万行,还是删除/插入?
- opayo - Sagepay ACS 提供商被 CSP 阻止
- android - Unity 触控在一秒钟内至少工作 5-6 次
- c# - 创建一个方法来返回监听。并更改它使用的添加方法
- python - 如何使用 keras 保存最佳权重和最佳模型
- wordpress - wp_mail() 将电子邮件主题中的“-”转换为“-”
- reactjs - 如何在 React 中的所有映射上方的选择框中添加一些选项?
- chart.js - Two Y-axis not aligning correctly