【问题标题】:Regular expression to validate image path with Hebew, English and characters用Hebew,英文和字符验证图像路径的正则表达式
【发布时间】:2021-02-19 10:38:15
【问题描述】:

我有图片路径之类的

טוסטר.jpeg
טוסטר(243).jpeg
טוסטר_234.jpeg
justImage.jpeg
justImage(2).jpeg
justImage_32.jpeg
justImage-12.jpeg
justImage-טר.jpeg
_asd_טוסטר_234.jpeg
/w/a/טוסטר.jpeg
/w/a/טוסטר_234.jpeg
/w/a/טוסטר(243).jpeg

我需要通过此类数据的验证。在路径中允许图像扩展名(无需验证确切的扩展名)、下划线、点、括号、英文字符、数字。图像可以具有类似 /a/b/someImageName.ext 的路径

我只制作了这个正则表达式,但它只验证一个希伯来字符而不是整个字符串

#[-\w.\\\\/()]+$)|((?:\p{Hebrew}+|\w+)+?)#

这个正则表达式完美地适用于英语和我需要的所有情况,但是当添加希伯来语时效果不佳

#[-\w.\\/()]+$)#

例子

https://regex101.com/r/7bndbF/1

提前谢谢

【问题讨论】:

  • #[-\w.\\/()]+$)# 是格式错误的模式,它如何工作?试试preg_match('#[-\w.\\\\/()]+$#uD', $str)
  • @WiktorStribiżew 向正则表达式添加了解释它是如何工作的
  • (^(?!.*[\\/]\.{2}[\\/])(?!\.{2}[\\/])[-\w.\\/()]+$) 不是#[-\w.\\/()]+$)#,对吧?
  • @WiktorStribiżew 对,不知道为什么你会看到,因为我粘贴了这个但没有发布(^(?!.*[\\/]\.{2}[\\/])(?!\.{2}[\\/])[-\w.\\/()]+$),只有#[-\w.\\/()]+$)#
  • 好的,'#^(?!.*[\\\\/]\.{2}[\\\\/])(?!\.{2}[\\\\/])[-\w.\\\\/()]+$#uD' 对你有用吗?

标签: php regex character hebrew


【解决方案1】:

你可以使用

preg_match('#^(?!.*[\\\\/]\.{2}[\\\\/])(?!\.{2}[\\\\/])[-\w.\\\\/()]+$#uD', $string)

请参阅regex demo

详情

  • ^ - 字符串开头
  • (?!.*[\\/]\.{2}[\\/]) - 如果有任何零个或多个字符而不是尽可能多的换行符,然后是 \/,两个点和一个 \/,则否定前瞻失败匹配紧邻当前位置的右侧
  • (?!\.{2}[\\/]) - 如果当前位置右侧有两个点和 /\,则匹配失败
  • [-\w.\\/()]+ - 零个或多个 -、字母、数字、_./\() 字符(由于 @ 允许任何 Unicode 字母和数字987654340@修饰符)
  • $ - 字符串的最后(由于 D 修饰符,不允许使用尾随换行符。)

【讨论】:

    【解决方案2】:

    您错过了模式中的 unicode 修饰符(以及第一组的开头 ()。用它。

    $pattern = '(^(/?[\p{Hebrew}\p{Latin}\pN()_.-]+)+$)uD';
    

    模式详情

    • ^ 字符串开头
    • ( 第一组开始
      • /? 一个或没有 /
      • [ 字符类开始
        • \p{Hebrew}希伯来文
        • \p{Latin}拉丁文
        • \pN 数字字符(任何脚本)
        • ()_.- 特定字符
      • ]字符类结束
      • +至少一个
    • )第一组结束
    • +至少一个
    • $

    修饰符

    • uunicode (utf-8) 模式
    • D 不允许 $ 在字符串结尾匹配 \n

    如果您不需要那么具体,可以将脚本替换为 \pL(字母)。

    $pattern = '(^(/?[\pL\pN()_.-]+)+$)Du';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2016-06-11
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多