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

时间:2018-01-24 13:15:28

标签: php string preg-match

我想这样做,我的字符串只能包含英文&数字和' - '

我试过了:

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

但它不起作用。

示例字符串可以是:

jhondo

JHON-DO

JHON-DO9

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参阅regex demo

模式详情

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

如果-字符只能出现在字母/数字之间且不能出现在字符串的开头/结尾处,请使用'~^[A-Z0-9]+(?:-[A-Z0-9]+)*$~iD'(以匹配非空字符串)或{{1} }(也匹配一个空字符串)。

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