Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP字符串只能包含英文&;数字和'-';_Php_String_Preg Match - Fatal编程技术网

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

PHP字符串只能包含英文&;数字和'-';,php,string,preg-match,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您可以使用 preg_match('~^[A-Z0-9-]*$~iD', $link) 看 图案细节 ^-字符串的开头 [A

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

我试过这个:

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)

图案细节

  • ^
    -字符串的开头
  • [A-Z0-9-]*
    -0或更多(将
    *
    替换为
    +
    以匹配1或更多)ASCII字母、数字或
    -
    (注意
    i
    修饰符使模式不区分大小写,字符类末尾的
    -
    不必转义)
  • $
    -字符串的最末端,因为
    D
    修饰符使其仅在字符串的最末端匹配
如果
-
字符只能出现在字母/数字之间,并且不能出现在字符串的开头/结尾,请使用
'~^[A-Z0-9]+(?:-[A-Z0-9]+)*$~iD'
(匹配非空字符串)或
'~^(?[A-Z0-9]+(?:-[A-Z0-9]+)*)?$~iD'
(也匹配空字符串)


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

尝试
预匹配('~^[a-Z0-9-]*$$iD',$link)
。具体要求是什么?可以有多少个
-
?连字符可以出现在字符串的开头/结尾吗?或者
([\w\d-]+)
@JustCarty
[\w\d-]+
等于
[\w-]+
,如果未提供
u
修饰符,则等于
[a-zA-Z0-9.-]+
,即它也匹配
。如果没有锚,它甚至会匹配那些包含字符而不是英文字母、数字或
-
@WiktorStribiżew unlimited-的字符串,这可能是因为每个空格都被替换为-。@JustCarty
\w
匹配单词字符,即字母、数字、
(如果您指定
u
修饰符,甚至更多)。