首页 > 解决方案 > 用Hebew,英文和字符验证图像路径的正则表达式

问题描述

我有图像路径之类的

טוסטר.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

提前谢谢

标签: phpregexcharacterhebrew

解决方案


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

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

图案细节

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

修饰符

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

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

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

推荐阅读