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'
.
我正在尝试这样做,我的字符串只能包含英文和数字以及'-'
我试过了:
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'
.