【问题标题】:Match letters and numbers, doesn't match numbers only [closed]匹配字母和数字,不只匹配数字[关闭]
【发布时间】:2013-05-23 13:38:07
【问题描述】:

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

所以,“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

谢谢你们!

【问题讨论】:

  • [0-9a-z] 之后添加+
  • 是的,我忘了加号。谢谢!
  • 不客气 Thom Thom Thom! ^^

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


【解决方案1】:

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

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

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

【讨论】:

  • 您的方式更具可读性。 Lookbehind 令人困惑,请查看我的更新。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多