【问题标题】:Regex to pass only with certain characters across entire string正则表达式仅在整个字符串中传递某些字符
【发布时间】:2013-04-02 11:29:38
【问题描述】:

我有一个字符串(可以是任意长度,最多 255 个字符),需要检查每个字符并确保它只包含以下字符(可以是任何顺序):

  • 字母(a-z 不区分大小写,A-Z 也一样)
  • 数字 (0-9)
  • 连字符 (-)
  • 和号 (&)
  • 撇号 (‘)
  • 句号 (.)
  • 斜线 (/)
  • 仅单个空格(理想情况下,如果可以单独标记以允许我删除任何其他不需要的空格,那就太好了)

例如,以下将成功

唐宁街 10 号

但以下不会

唐宁街 10 号

正则表达式能够做到这一点吗?将使用 PHP preg_match 函数。

提前致谢:)

【问题讨论】:

  • 到目前为止你想出了什么模式?
  • 是的,可能 :) 你可以尝试一下,然后人们会帮助你
  • 当然我的正则表达式绝对是垃圾 - 我已经做到了:/([a-zA-Z0-9])/ 但它只检查第一个字符 - 对不起我的愚蠢:(任何带有解释的入门会很有用,如果需要很多时间就不需要整个解决方案:)

标签: php regex


【解决方案1】:

单个字符匹配可以使用字符类来完成,类似于您尝试过的:

[a-zA-Z0-9\-&'./]

然后,您可以通过在其后添加+ 来指定任何大于或等于这些字符之一的数字。但是由于您想验证它不应超过 255 个字符,您也可以使用显式量词来执行此操作:{0,255} 允许从 0 到 255 的任何长度。请注意,连字符被转义,因为它有一个特殊的在字符类中的含义。您可以通过使用i 修饰符使模式不区分大小写来简化此操作。

匹配单个空格的要求有点复杂,有几种方法可以做到这一点,但既然你也说你想将它们标准化为一个空格,我建议您首先执行此操作,以便为简单起见为您的角色类添加空间。这可以通过另一个正则表达式轻松完成:

/ +/

这匹配每个包含 1 个或多个空格字符的块,因此您只需将所有匹配项替换为单个空格。

既然您知道字符串只包含单个空格,您可以使用^$ 主题声明的开始和结束来简单地声明整个字符串只包含列表中的字符。所以把它们放在一起,你会得到这样的结果:

// Replace all space blocks to a single space
$normalizedSpace = preg_replace('# +#', ' ', $input);

// Validate the input contains only the chars you want
if (!preg_match('#^[a-z0-9\-&\'./ ]{0,255}$#i', $normalizedSpace)) {
    // Data invalid, handle error here
} else {
    // If you get here the data is valid
    $validData = trim($normalizedSpace);
}

我怀疑你也想trim() 数据,尽管情况可能并非如此。

【讨论】:

    【解决方案2】:

    这将匹配允许的字符,最多允许 255 个字符(或空字符串)。

    /^[a-z0-9'.\/& -]{0,255}$/iD
    

    【讨论】:

      【解决方案3】:

      你可以否定一个正则表达式范围:

      [^a-zA-Z0-9 -'&./]
      

      这将匹配除 a-z、A-Z、0-9、' '、'-'、''&、'.'、'/' 以外的任何字符。

      如果匹配,则字符串中有错误。

      这不会处理空白,因为这是您在验证字符串之前应该处理的问题。

      http://www.webdeveloper.com/forum/showthread.php?230179-How-do-I-reduce-multiple-spaces-into-a-single-space-using-preg_replace

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 2013-09-06
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多