PHP 字符串只能包含英文&数字和'-'

PHP string can contains only English & numbers and '-'

我正在尝试这样做,我的字符串只能包含英文和数字以及'-'

我试过了:

elseif (!preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $link)){echo 'error';} // Always returning error.. 

但是它不起作用。

示例字符串可以是:

jhondo

jhon-do

jhon-do9

您可以使用

preg_match('~^[A-Z0-9-]*$~iD', $link)

参见regex demo

图案详情

  • ^ - 字符串开头
  • [A-Z0-9-]* - 0个或多个(将*替换为+以匹配1个或多个)ASCII字母、数字或-(注意i 修饰符使模式不区分大小写,字符 class 末尾的 - 不必转义)
  • $ - 字符串的末尾,因为 D 修饰符使其仅在字符串的末尾匹配。

如果-字符只能出现在letters/digits之间,不能出现在字符串的start/end处,使用'~^[A-Z0-9]+(?:-[A-Z0-9]+)*$~iD'(匹配非空字符串) 或 '~^(?:[A-Z0-9]+(?:-[A-Z0-9]+)*)?$~iD' (也匹配空字符串)。

如果您只是想避免将字符串与两个连续的 - 字符匹配,请在开头添加 (?!.*--) 否定前瞻:'~^(?!.*--)[A-Z0-9-]*$~iD'.