0

所以我正在尝试做一个相对简单的 php 正则表达式来检查字符串是否包含以下字符之一:.,%$@/0123456789 但我也想检查它是否包含双反斜杠(我不希望它评估如果它只包含一个反斜杠,则为真),我不知道该怎么做。任何帮助,将不胜感激 :)

这是我到目前为止使用的:

preg_match('/[.,%$@\/0-9]/',$string)

我不知道如何在双反斜杠中包含“\\\\”。

提前致谢!

4

2 回答 2

1

您只是在寻找您的字符集或双反斜杠,对吗?所以:

preg_match('/[.,%$@\/0-9]|\\\\/',$string)

where|表示“或”。

于 2013-08-15T16:14:21.667 回答
0

如果字符串必须由您给定的字符组成,而且还必须包含双反斜杠,但不能包含单个反斜杠,那么据我所知,您将需要 3 个正则表达式。

if (
  (!preg_match('/[^.,%$@\/\\0-9]/', $string)) // fails if the string contains a character that is not allowed
  &&
  ! (
    preg_match('/\\/', $string) // contains at least one backslash
    &&
    !preg_match('/\\{2}/') // succeeds if the string contains a double-backslash
  )
) { /* code */ }

如果您尝试将所有规则组合到一个正则表达式中,那么您将度过一段糟糕的时光。

还有一个缺点是,一旦字符串包含双反斜杠,它就可以在任何地方有额外的反斜杠,即'12\3456\78\90' 是有效的。如果这是可能的,但在输入中是不允许的,那么您可能需要考虑一个严格检查格式的正则表达式,而不仅仅是测试有效字符。

于 2013-08-15T16:38:04.740 回答