标题说明了一切:我正在检查用户的用户名是否包含非数字或字母的任何内容,例如€{¥] ^} + <€,标点符号,空格或什至是âæłęč。这可能在php中吗?
答案 0 :(得分:1)
您可以在PHP中使用ctype_alnum()
函数。
摘自手册。
检查字母数字字符
如果文本中的每个字符都是字母或数字,则返回TRUE,否则返回FALSE。
var_dump(ctype_alnum("æøsads")); // false
var_dump(ctype_alnum("123asd")); // true
答案 1 :(得分:0)
您想做的事很简单,PHP has a number of regex functions
如果您只想知道 IF ,则字符串包含非字母数字字符,则只需使用 preg_match():
preg_match( '/[^A-Z|a-z|0-9]*/', $userName );
如果用户名包含 字母数字以外的其他任何字符(AZ,az或0to9),则会返回1 ;如果用户名< em>不包含非字母数字。
正则表达式PCRE模式使用诸如斜杠/
之类的定界符打开和关闭,需要像对待字符串一样(用引号引起来):'/myPattern/'
其他一些关键特征是:
[方括号包含匹配项]
[a-z] // means match any lowercase letter
这种模式意味着相对于这些括号中的模式,检查$ String中的当前字符,在这种情况下,请将任何小写字母a匹配到z。
^脱字号(元字符)
[^a-z] // means no lowercase letters
如果插入号^(又名帽子)是括号内的第一个字符 ,则它会否定括号内的模式,因此[^A|7]
表示匹配任何 EXCEPT 大写字母A和数字7。(注意:在 outside 中,插入符号^表示字符串的开头。)
\ wWdDsS。元字符(通配符)
\w // match all alphanumeric
一个转义的(即反斜杠\)小写字母w表示匹配任何“单词”字符,即字母数字和下划线_,这是[A-Z|a-z|0-9|_]
的简写。大写的\W
是 NOT 字字符,等效于[^A-Z|a-z|0-9|_] or [^\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
未显示:捕获组,反向引用,替换(正则表达式的真正功能)。有关更多信息,请参见https://www.phpliveregex.com/#tab-preg-match,其中包括基于PHP函数的实时模式匹配操场,并以数组形式提供结果。
因此对于您的模式,要匹配所有非字母和数字(包括下划线),您需要:'/[^A-Z|a-z|0-9]*/' or '/[\W|_]*/'
如果您想从字符串中剥离所有非字母字符,请使用preg_replace( $Regex, $Replacement, $StringToClean )
<?php
$username = 'Svéñ déGööfinøff';
echo preg_replace('/[\W|_]*/', '', $username);
?>
输出为: SvdGfinff
如果您希望用标准的拉丁字母替换某些带有重音符号的字母以保持名称的合理可读性,那么我相信您需要一个查找表(数组)。 There is one ready to use at the PHP site