【问题标题】:preg_match() include "-" [duplicate]preg_match() 包括“-”[重复]
【发布时间】:2014-07-19 17:08:23
【问题描述】:

我已经尝试在代码中包含 - 但我总是遇到问题

中包含这个字符“-”的正确方法是什么?
!preg_match("/^[a-zA-Z0-9\. ]*$/", $home)

谢谢

【问题讨论】:

  • 您需要将其转义 (\-),或将其设为 [] 中的第一个字符。
  • @meagar: C#??不同语言支持的正则表达式语法存在一些差异(即使在这种情况下它是相同的),所以我认为你不应该这样做。
  • @meagar:我知道没有任何正则表达式方言会具有转义您所描述的语法。 [a\-z] 匹配所有小写字符。
  • @justsomebody [-a-z][a-z-] 都匹配 -a-z。除非它是模棱两可的,否则你不必逃避它。
  • @meagar 是的,如果你把它放在第一位或最后,你可以让它在一个字符类中代表自己。但是如果它不在这些位置,您可以在破折号前面放置任何反斜杠以使其非特殊。 你需要转义它 (\-) 是错误的。

标签: php


【解决方案1】:

在字符类中,- 符号需要像这样转义:

!preg_match("/^[a-zA-Z0-9\. \-]*$/", $home);

此外,您可以从字符类中删除 A-Z 并将 i 标志添加到正则表达式,如下所示:

!preg_match("/^[a-z0-9\. \-]*$/i", $home);

【讨论】:

  • 你的连字符是字符类中的最后一个字符:在这种情况下不需要转义它。有关详细信息,请参阅链接的问题。
  • @ÁlvaroG.Vicario 很有趣 - 我不知道。谢谢你告诉我
【解决方案2】:

来自manual

如果类中需要减号,则必须使用 反斜杠或出现在不能被解释为的位置 表示一个范围,通常作为第一个或最后一个字符 类。

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2021-05-28
    相关资源
    最近更新 更多