如何验证字母和数字或字母字符串?

时间:2017-06-22 03:36:49

标签: php regex preg-match

我想匹配字母和数字,但不仅仅是数字。

所以我想创建一个preg_match()模式来像这样过滤:

例如:

  1. no123 true
  2. 123no true
  3. 123456 false
  4. letters true

4 个答案:

答案 0 :(得分:1)

使用SKIP-FAIL模式将胜过Toto的模式(并且MH2K9的答案不正确,因为它不允许所有字母匹配)。您可以在我的演示链接中的示例文本上测试他们的模式。

/^\d+$(*SKIP)(*FAIL)|^[a-z\d]+$/i

Pattern Demo Link

这“纯粹”数字字符串“取消资格”,并匹配混合(数字 - 字母)和纯字母字符串。

代码:(Demo

$string='test123';
var_export(preg_match('/^\d+$(*SKIP)(*FAIL)|^[a-z\d]+$/i',$string)?true:false);

输出:

true

UPDATE:除了正则表达式之外,此任务逻辑可以通过两个非常简单的非正则表达式调用执行:ctype_alnum()ctype_digit()

代码:(Demo

$tests = [
    'no123', // true
    '123no', // true
    '123456', // false
    'letters', // true
];

foreach ($tests as $test) {
    echo "$test evaluates as " , (ctype_alnum($test) && !ctype_digit($test) ? 'true' : 'false') , "\n";
}

输出:

no123 evaluates as true
123no evaluates as true
123456 evaluates as false
letters evaluates as true

答案 1 :(得分:1)

所以我们必须至少有一封信。在它之前可以有任意数量的数字,并允许任何数量的字母数字字符直到字符串的结尾。

/^\d*[a-z][a-z\d]*$/i
  • ^字符串开头
  • \d*任意数量的数字
  • [a-z]一封信
  • [a-z\d]*任意数量的字母数字字符
  • $直到字符串结尾
  • i无标签匹配标志

See this demo at regex101

答案 2 :(得分:0)

您可以试试Regex。它会检查数字和字母至少一个。

(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$

答案 3 :(得分:0)

根据你的评论:"只有字母vaild但只有数字无效。",这将完成工作:

if (preg_match('/^(?=.*[a-z])[a-z0-9]+$/i', $inputString)) {
    // valid
} else {
    // invalid
}

<强>解释

/               : regex delimiter
  ^             : start of string
    (?=.*[a-z]) : lookahead, make sure we have at least one letter
    [a-z0-9]+   : string contains only letters and numbers
  $             : end of string
/i              : regex delimiter + flag case insensitive