我有这个大梁
!preg_match("/^[a-z0-9](?:[a-z0-9'. -]*[a-z0-9])?$/i", stripslashes($post['job_title']))我希望在这个正则表达式中允许数字括号和斜线。因为某些职称可以是“前端开发人员/设计师”或“招聘人员(HR)”,我如何做到这一点?
发布于 2022-08-26 11:30:13
好的,我成功地为这个做了一个正确的正则表达式,它允许在内部,但不是在开始/结束,也允许括号内和在开始/结束。
!preg_match("/^[a-z0-9\(\)](?:[a-z0-9\/\(\)'. -]*[a-z0-9\(\)])?$/i", stripslashes($post['job_title']))感谢@anubhava,他的回答给了我一个如何在regex中添加内容的想法
发布于 2022-08-28 00:07:48
我不认为你的意图是被转换成模式。
/^[a-z0-9](?:[a-z0-9'. -]*[a-z0-9])?$/i
/^[a-z0-9\(\)](?:[a-z0-9\/\(\)'. -]*[a-z0-9\(\)])?$/i在问题中的模式和答案中的模式中,第三部分(最后的可选字符匹配)没有提供有效的验证。您可以看到模式中间的多字符(零或多个)匹配包含最后一个字符类中的所有字符。换句话说,在没有最后一个可选检查的情况下,您的模式将完全相同。这些都是合适的替代品:
/^[a-z0-9](?:[a-z0-9'. -]*$/i
~^[a-z0-9()](?:[a-z0-9/()'. -]*$~i如果您的意思是要求字符串以字母数字或括号字符结尾,那么在?之前删除$。
尽管如此,如果你想确保:
句号、空格和点只出现在字符串的中间和string
那么最好的策略将是“测试驱动的开发”。创建一个大型的、多样化的字符串示例,以及您知道应该失败的不现实字符串。然后对所有字符串运行当前模式。然后分析哪些案例没有按预期进行评估,并调整您的模式。
https://stackoverflow.com/questions/73500105
复制相似问题