Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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 - Fatal编程技术网

Php 如何检查字符串是否仅由字母和数字组成?(菲律宾)

Php 如何检查字符串是否仅由字母和数字组成?(菲律宾),php,Php,标题说明了一切:我正在检查用户的用户名是否包含非数字或字母的内容,例如€{¥]^}+您可以在PHP中使用该函数 从手册上 检查字母数字字符 如果文本中的每个字符都是字母或数字,则返回TRUE,否则返回FALSE var_dump(ctype_alnum(“æøsads”);//错误的 变量转储(ctype_alnum(“123asd”);//符合事实的 现场演示 PHP不使用正则表达式 你想做的事情很琐碎 测试字符串中的字符 如果您只想知道字符串是否包含非字母数字字符,那么只需使用preg_

标题说明了一切:我正在检查用户的用户名是否包含非数字或字母的内容,例如€{¥]^}+您可以在PHP中使用该函数

从手册上

检查字母数字字符
如果文本中的每个字符都是字母或数字,则返回TRUE,否则返回FALSE

var_dump(ctype_alnum(“æøsads”);//错误的
变量转储(ctype_alnum(“123asd”);//符合事实的
  • 现场演示
PHP不使用正则表达式 你想做的事情很琐碎

测试字符串中的字符 如果您只想知道字符串是否包含非字母数字字符,那么只需使用preg_match()

preg_match( '/[^A-Z|a-z|0-9]*/', $userName );
这将返回1如果用户名包含字母数字以外的内容(A-Z或A-Z或0到9),如果用户名不包含非字母数字,则返回0

正则表达式模式元素 Regex PCRE模式使用分隔符打开和关闭,例如斜杠
/
,需要像字符串一样处理(引号):
'/myPattern/'
其他一些关键功能包括:

[括号包含匹配集]
[a-z]//表示匹配任何小写字母
此模式意味着相对于这些括号中的模式检查$String中的当前字符,在本例中匹配任何小写字母a到z

^插入符号(元字符)
[^a-z]//表示没有小写字母
如果插入符号^(又名帽子)是括号内的第一个字符,它会否定括号内的图案,因此
[^a | 7]
表示匹配除大写字母a和数字7以外的任何字符。(注意:当位于括号外时,插入符号^表示字符串的开头。)

\wwdds。元字符(通配符)
\w//匹配所有字母数字
转义(即前面有反斜杠\)小写w表示匹配任何“单词”字符,即字母数字和下划线,这是
[a-Z | a-Z | 0-9 | | |]
的缩写。大写的
\W
不是单词字符,相当于
[^A-Z | A-Z | 0-9 |]或[^\W]

.   // (dot) match ANY single character except return/newline
\w  // match any word character [A-Z|a-z|0-9|_]
\W  // NOT any word character [^A-Z|a-z|0-9|_]
\d  // match any digit [0-9]
\D  // NOT any digit [^0-9].
\s  // match any whitespace (tab, space, newline)
\S  // NOT any whitespace 
*+?|元字符(量词))
这些修改了上述的行为

*   // match previous character or [set] zero or more times, 
    // so .* means match everything (including nothing) until reaching a return/newline.
+   // match previous at least one or more times.
?   // match previous only zero or one time (i.e. optional).
|   // means logical OR, so: 
    [A-C|X-Z] // means match any of A,B,C,X,Y, or Z
未显示:捕获组、反向引用、替换(regex的真正威力)。有关更多信息,请参阅,其中包括基于PHP函数的实时模式匹配,并以数组形式提供结果

回到你的房间去 因此,对于您的模式,要匹配所有非字母和数字(包括下划线),您需要:
“/[^A-Z | A-Z | 0-9]*/”或“/[\W| |]*/”

脱衣搜查 如果要从字符串中删除所有非字母字符,请使用
preg\u replace($Regex,$Replacement,$StringToClean)



输出是:
SvdGfinff
如果您希望用标准拉丁字母替换某些重音字母以保持名称的可读性,那么我相信您需要一个查找表(数组)

你可以这么做,但为什么?James O'Reilly先生、Victoria Van de Waal女士和RenéDuchamps先生可能都有话要说。@Redd Herring我想将用户名存储为没有特殊字符的东西,这样你就不能有像隐形名称和隐形字符之类的东西。基本上我只想输入0123456789ABCDEFGHIjklmnopqrstuvwxyzABEFGHIjklmnopqrstuvxyz并检查是否每个字符都是该列表的一部分。这很公平。我误解了你的问题,把用户名解释为用户名。道歉!为了安全使用,变量必须是字符串。如果提供的输入是一个整数,例如13,它将返回false。我会将值包装在
strval()
上,以避免出现这种情况,除非OP确保该值始终是字符串,即使包含数值。“注意:如果提供了一个介于-128和255之间的整数,它将被解释为单个字符的ASCII值(为允许扩展ASCII范围内的字符,已添加了256个负值)。任何其他整数都被解释为包含整数小数位数的字符串。“@Qirel这看起来像我要找的!感谢您的帮助:)
<?php
    $username = 'Svéñ déGööfinøff';
    echo preg_replace('/[\W|_]*/', '', $username);
?>