匹配字母和数字,仅与数字不匹配

时间:2013-05-23 13:38:07

标签: php regex preg-match regex-negation regex-lookarounds

我需要匹配数字和字母,但我不想只匹配数字。

所以,“a1”应该匹配,“1a”也是如此。 “a”应该匹配。 “1”,“1111”,“987”等不应匹配。

<?php
echo preg_match('~^(?![0-9])[0-9a-z]$~', 'a1') . PHP_EOL; // I expect 1
echo preg_match('~^(?![0-9])[0-9a-z]$~', '1a') . PHP_EOL; // I expect 1
echo preg_match('~^(?![0-9])[0-9a-z]$~', '1') . PHP_EOL; // I expect 0
echo preg_match('~^(?![0-9])[0-9a-z]$~', 'a') . PHP_EOL; // I expect 1

我怎样才能取得这些成果?

更新:

它正在运作:

<?php
echo preg_match('~^(?=[a-z]+)|(?![0-9]+)[0-9a-z]+$~', 'a1') . PHP_EOL; // I expect 1
echo preg_match('~^(?=[a-z]+)|(?![0-9]+)[0-9a-z]+$~', '1a') . PHP_EOL; // I expect 1
echo preg_match('~^(?=[a-z]+)|(?![0-9]+)[0-9a-z]+$~', '1') . PHP_EOL; // I expect 0
echo preg_match('~^(?=[a-z]+)|(?![0-9]+)[0-9a-z]+$~', 'a') . PHP_EOL; // I expect 1

echo PHP_EOL;

echo preg_match('~[0-9]*[a-z]+[0-9a-z]*~', 'a1') . PHP_EOL; // I expect 1
echo preg_match('~[0-9]*[a-z]+[0-9a-z]*~', '1a') . PHP_EOL; // I expect 1
echo preg_match('~[0-9]*[a-z]+[0-9a-z]*~', '1') . PHP_EOL; // I expect 0
echo preg_match('~[0-9]*[a-z]+[0-9a-z]*~', 'a') . PHP_EOL; // I expect 1

谢谢你们!

1 个答案:

答案 0 :(得分:0)

您是否尝试过包含此内容的模式:

[0-9]*[a-z]+[0-9a-z]*

这至少应匹配一个字母和任意数字的数字。