我需要测试一个字符串,以查看[0]字符(第一个字符)后面的字符是否为数字。
所以例子:
C是[0]
然后我需要检查剩下的字符是否只是数字,这意味着在C之后我们得到:
12345678
制作字符串C12345678
这就是我的尝试:
elseif(substr($str, 1, preg_match("/^[0-9]/", $str) === FALSE))
{
$this -> set_message('is_valid_student_id', 'Must have 8 digits 0 - 9');
return FALSE;
}
第一个字符将始终是最后8个始终为数字的字符。
由于
编辑1:
所以做你们告诉我的事情并没有给我预期的结果......
elseif (preg_match("/^\c\d{8}$/i", $str) === FALSE) // Lower case cC + 8 digits
{
$this -> set_message('is_valid_student_id', 'must have 8 digits 0 - 9');
return FALSE;
}
即使我在第一个字母[c或C]
之后输入一个字母,也不会返回FALSE答案 0 :(得分:2)
非正则表达式解决方案怎么样?
<强> DEMO 强>
$student_id = "C123b5678";
if(ctype_alpha($student_id[0])){
if(ctype_digit(substr($student_id,1,strlen($student_id) - 1))){
echo 'valid';
}
else{
echo 'invalid';
}
} else { echo 'invalid starting character'; }
// echoes invalid
编辑:正如Cryode所指出的,is_numeric()
对于这个应用来说太广泛了。它允许C1e5
之类的字符串作为有效字符串传递...使用ctype_digit()
修复此问题。如果需要,也可以添加strlen()
的支票。
答案 1 :(得分:0)
只需这样做:
if (preg_match('~^C[0-9]{8}$~', $str))
...true...
else
...false...
答案 2 :(得分:0)
if (preg_match('/.\d+/'))
怎么样?
.
部分表示“长度为1的任何符号”; \d+
仅为数字,一次或多次出现。
更新:
要禁止在第一个位置使用数字,请使用
preg_match('/[^\d]\d+/')
。
答案 3 :(得分:0)
最简单的正则表达式是
/^C\d{8}$/
您只能使用preg_match
,因此不需要sub_str
。或者,如果您希望它与任何字母匹配而不仅仅是C
,那么您可以使用
/^[a-z]\d{8}$/i
这将匹配字符串
开头的大写和小写字母答案 4 :(得分:0)
首先,您在某些方面使用substr()
错误。 The third parameter是您要返回的子字符串的长度,从第二个参数中给出的位置开始。
substr()
也将返回false,如果没有正匹配则不返回false。对于这样的功能,您需要strpos()
。
您可以单独使用preg_match()
来验证短字符串的结构。
假设:
我们可以使用这个:
preg_match('/^[a-zA-Z]\d+$/', $str)
如果您的第一个字符仅为大写字母,则可以删除a-z
部分(反之亦然,小写字母)。
如果数字位数是特定长度,您可以使用{X}
:
preg_match('/^[a-zA-Z]\d{8}$/', $str) // Exactly 8 numbers