【问题标题】:Regex extension and language正则表达式扩展和语言
【发布时间】:2016-12-02 18:42:53
【问题描述】:

我正在研究验证一些文件名。但无法找出正确的正则表达式 文件名可以是任何东西,但需要检查文件名是否以

结尾
  1. _下划线
  2. en 或 ru 或 cy(国家代码 2 个字母)
  3. 。 (点)
  4. 扩展名(jpeg、jpg、mp4、png、gif)

so 文件

my_file_dummy_name.jpeg - not valid
my_file_dummy_name_en.jpeg - valid

现在我尝试了这个(并且正在工作,但也许有更好的解决方案)

/(\_\w.\.\w+)/g

还有一个:

/(\_[a-z]{2}\.[a-z]{3,4})/g

【问题讨论】:

    标签: javascript php jquery regex


    【解决方案1】:

    您的原始正则表达式的问题在于,虽然它会匹配您想要允许的文件名,但它也会匹配您不想要的东西。

    例如下面的正则表达式

    /(\_\w{2}\.\w+)/g
    

    将匹配文件my_file_dummy_name_de.mpeg,这是一个来自德国的视频文件。显然,我们一开始就不想看这个。

    试试这个正则表达式:

    _(en|ru|cy)\.(jpeg|jpg|mp4|png|gif)$
    

    演示在这里:

    Regex101

    【讨论】:

    • 当然,这可以改进一点:/_(?:en|ru|cy)\.(?:jpe?g|mp4|png|gif)$/,但这取决于人们在正则表达式中寻求什么:)
    • 该死,我在通勤时在手机上打字哈哈
    • @rgoliveira 猜猜看……我也在使用移动设备,尽管它通常对我来说很糟糕。向你投赞成票。
    • @Mariano 在我看来,在 Android 上比在 iOS 上要容易得多。我什至在移动设备上做过 SQL Fiddles。
    【解决方案2】:

    如果您希望正则表达式为您完成所有检查,则有一种更严格的方法:

    /_(en|ru|cy)\.(jpeg|jpg|mp4|png|gif)$/
    

    这样可以确保您提到的所有这些限制。此外,不需要global 标志,因为我们只对字符串的结尾感兴趣(这就是我放置 EOL 锚点$ 的原因)。但是,如果文件名中可能存在大小写混合,您可以添加 ignore 大小写标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2011-01-31
      • 1970-01-01
      • 2018-11-08
      相关资源
      最近更新 更多