将用户名验证为带下划线的字母数字

2022-08-30 12:35:28

在我的注册页面上,我需要仅将用户名验证为字母数字,但也要使用可选的下划线。我想出了这个:

function validate_alphanumeric_underscore($str) 
{
    return preg_match('/^\w+$/',$str);
}

这似乎工作正常,但我不是正则表达式专家!有没有人发现任何问题?


答案 1

\w 的实际匹配字符取决于正在使用的区域设置:

“单词”字符是任何字母或数字或下划线字符,即可以作为Perl“单词”一部分的任何字符。字母和数字的定义由 PCRE 的字符表控制,如果进行特定于区域设置的匹配,则可能会有所不同。例如,在“fr”(法语)区域设置中,某些大于 128 的字符代码用于重音字母,这些字符代码由 \w 匹配。

因此,您最好显式指定要允许的字符:

/^[A-Za-z0-9_]+$/

这只允许字母数字字符和下划线。

如果您只想允许下划线作为串联字符,并希望强制用户名必须以字母字符开头:

/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/

答案 2

下面是一个自定义函数,用于通过将 PHP ctype_alnum与允许的字符数组结合使用来验证字符串:

<?php

$str = "";
function validate_username($str) {

  // each array entry is an special char allowed
  // besides the ones from ctype_alnum
  $allowed = array(".", "-", "_");

  if ( ctype_alnum( str_replace($allowed, '', $str ) ) ) {
    return $str;
  } else {
    $str = "Invalid Username";
    return $str;
  }
}

?>

推荐