【发布时间】:2012-12-15 06:27:56
【问题描述】:
我有一个 If-else 语句,它检查字符串以查看是否存在 ISBN-10 或 ISBN-13(图书 ID)。
我面临的问题是 ISBN-10 检查发生在 ISBN-13 检查之前,ISBN-10 检查将匹配任何具有 10 个或更多字符的内容,因此可能会将 ISBN-13 误认为 ISBN-10 .
这里是代码...
$str = "ISBN:9780113411436";
if(preg_match("/\d{9}(?:\d|X)/", $str, $matches)){
echo "ISBN-10 FOUND\n";
//isbn returned will be 9780113411
return 0;
}
else if(preg_match("/\d{12}(?:\d|X)/", $str, $matches)){
echo "ISBN-13 FOUND\n";
//isbn returned will be 9780113411436
return 1;
}
如何确保避免此问题?
【问题讨论】:
-
嗯...交换订单?
-
$str 变量不是有效的 ISBN 编号,并且不会匹配您提供的任何一个正则表达式。你想搭配什么?像 $str 之类的东西,还是一个实际的 ISBN?
-
@WillC。你是什么意思它不是一个有效的 ISBN?这是一本真正的书,可以在亚马逊上找到
-
我的错误,我没有正确阅读 ISBN 文档。你是对的。 isbn.org/standards/home/isbn/us/isbnqa.asp#Q3 注意,':' 似乎不是唯一的分隔符:isbn.org/standards/home/isbn/international/html/usm4.htm
标签: php regex validation isbn