小编典典

字母、数字和 - _ 的正则表达式

all

如果值是以下任何组合,我在检查 PHP 时遇到问题

  • letters (upper or lowercase)
  • numbers (0-9)
  • underscore (_)
  • dash (-)
  • point (.)
  • no spaces! or other characters

a few examples:

  • OK: “screen123.css”
  • OK: “screen-new-file.css”
  • OK: “screen_new.js”
  • NOT OK: “screen new file.css”

我想我需要一个正则表达式,因为当给定字符串中包含除上述字符之外的其他字符时,我需要抛出错误。


阅读 61

收藏
2022-08-07

共1个答案

小编典典

您想要的模式类似于(rubular.com 上查看):

^[a-zA-Z0-9_.-]*$

解释:

  • ^是线锚的开始
  • $是线锚的末端
  • [...]是一个字符类定义
  • *是“零个或多个”重复

请注意,文字破折号-是字符类定义中的最后一个字符,否则它具有不同的含义(即范围)。在.字符类定义之外也有不同的含义,但在内部,它只是一个字面量.

参考


在 PHP 中

这是一个片段,展示了如何使用此模式:

<?php

$arr = array(
  'screen123.css',
  'screen-new-file.css',
  'screen_new.js',
  'screen new file.css'
);

foreach ($arr as $s) {
  if (preg_match('/^[\w.-]*$/', $s)) {
    print "$s is a match\n";
  } else {
    print "$s is NO match!!!\n";
  };
}

?>

上面的打印(如在 ideone.com 上看到的):

screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!

请注意,模式略有不同,请\w改为使用。这是“单词字符”的字符类。

API 参考


规格说明

这似乎符合您的规范,但请注意,这将匹配诸如.....等之类的内容,这可能是您想要的,也可能不是您想要的。如果您可以更具体地匹配您想要匹配的模式,那么正则表达式会稍微复杂一些。

上面的正则表达式也匹配空字符串。如果您至少需要一个字符,请使用+(one-or-more) 而不是*(zero-or-more) 进行重复。

在任何情况下,您都可以进一步阐明您的规范(在询问正则表达式问题时总是有帮助),但希望您也可以根据上述信息学习如何自己编写模式。

2022-08-07