我们正在尝试为我们的招生办公室设置在线申请,我们需要错误检查社会保险号码,以确保他们输入了有效值。 xxx-xx-xxxx
或仅9位数。我已经尝试了几次迭代,这就是我现在所做的:
$ssn = $form_values['submitted_tree']['biographical_information']['social_security_number'];
if (strlen($ssn) > 0 && preg_match('/^([0-9]){3}(([ ]|[-])?([0-9]){2})(([ ]|[-])?([0-9]){4})?$/', $ssn) == 0) {
form_set_error('submitted][biographical_information][social_security_number', t('You must enter a valid Social Security Number: ###-##-####'));
}
答案 0 :(得分:2)
由于您没有进行“真正的”SSN验证(例如,它们不是以0开头)。我会为除了数字字符之外的所有内容做一个preg_replace然后你可以检查长度为== 9.
preg_replace("/[^0-9]/","",$input);
然后你可以允许人们进入他们想要的社交(xxx-xx-xxxx或xxx.xx.xxxx等)并且验证仍然有效。我不时用电话号码做同样的事。
答案 1 :(得分:1)
为什么不简单地从字符串中删除任何-
,然后验证它是9位?
$ssn = ...;
$ssn_validate = str_replace('-', '', $ssn);
$pattern = '/^[0-9]{9}$/';
if(preg_match($pattern, $ssn_validate)) {
// it matched
}
答案 2 :(得分:1)
这应该可以解决问题:
if( (is_numeric($ssn) && strlen($ssn) == 9)
|| preg_match("/^[0-9]{3}-[0-9]{2}-[0-9]{4}$/", $ssn) ){
echo "valid";
} else {
echo "invalid";
}
这将确保社会安全号码纯粹为9位数或遵循正确的格式(xxx-xx-xxxx)
答案 3 :(得分:0)
简单解决方案:删除所有非数字字符,然后验证剩下的内容。
$ssn = preg_replace('~\D~', '', $ssn); // replace all non-digits
if(preg_match('~^\d{9}$~', $ssn)) { // look for exactly 9 digits
echo "valid";
} else {
echo "invalid";
}
注意:这与Matt Thompson(正确)答案的概念相同,但充实了更多。
如果您想进行更准确的验证,您可以检查它是否在任何群组中都没有全部零,并且不是虚假号码。 (来源:Wikipedia):
$ssn = preg_replace('~\D~', '', $ssn); // replace all non-digits
if(preg_match('~^(?!000|666|9\d\d)\d{3}(?!00)\d{2}(?!0000)\d{4}$~', $ssn)) { // look for exactly 9 digits
echo "valid";
} else {
echo "invalid";
}
答案 4 :(得分:0)
这是我用来验证SSN并正确格式化的,这绝不会失败:
function check_ssn($ssn){
$clean_ssn = preg_replace("/[^0-9,.]/", "", $ssn);
$formatted_ssn = preg_replace("/^(\d{3})(\d{2})(\d{4})$/", "$1-$2-$3", $clean_ssn);
// echo $formatted_ssn;
if (preg_match ('/^\d{3}-\d{2}-\d{4}$/', $formatted_ssn)){
$result = 1;
} else $result = 0;
return $result;
}