我想这样做,我的字符串只能包含英文&数字和' - '
我试过了:
elseif (!preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $link)){echo 'error';} // Always returning error..
但它不起作用。
示例字符串可以是:
jhondo
JHON-DO
JHON-DO9
答案 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'
字符匹配,请在开头添加-
否定前瞻:(?!.*--)
。