正在创建正则表达式



我正在创建一个资产管理系统,其中所述资产被分配了一个控制编号。

这段代码由第一个选项的类型组成它以大写字母P开头,后面跟着一个0-7的数字,然后是一个连字符,然后是三个或两个大写字母,后面跟着一个连字符,最后以5位数字结尾。

这个正则表达式

/^((P){1}[0-7]{1})-([A-Z]{2,3})-([0-9]{5})$/

已经创建并且工作正常。我的问题是第二个选项,它以SOT开头,然后是连字符,然后是三个或两个大写字母,然后是连字符,以5位数字结尾。

我对这个表达的理解是

/^SOT-([A-Z]{2,3})-([0-9]{5})$/

但是当我检查它是否正确时,我发现我自己的"模式不匹配"。消息,我一直在寻找几个小时的错误。谢谢你的阅读和帮助。

JS

let $input=document.querySelector('#valor');
let $input2=document.querySelector('#valor2');
if (!$input.value.match(/^[0-9]{6,7}$/)) {
$mensaje.textContent='Debe ser un número de 6 o 7 digitos';
$mensaje.style.textAlign = 'center';
$mensaje.style.width = '62%' 
$mensaje.classList.remove('none');
$mensaje.classList.add('is-active');
$boton.disabled=true;
$div.appendChild($mensaje);
}else{
$mensaje.classList.remove('is-active');
$mensaje.classList.add('none');
$boton.disabled=false;
}
if (!$input2.value.match(/^((P){1}[0-7]{1})-([A-Z]{2,3})-([0-9]{5})$/) || !$input2.value.match(/^SOT-([A-Z]{2,3})-([0-9]{5})$/)) {

$mensaje.textContent='No cumple con el patrón';
$mensaje.style.textAlign = 'center';
$mensaje.style.width = '62%' 
$mensaje.classList.remove('none');
$mensaje.classList.add('is-active');
$boton.disabled=true;
$div.appendChild($mensaje);

}else{
$mensaje.classList.remove('is-active');
$mensaje.classList.add('none');
$boton.disabled=false;
}

你的正则表达式是正确的,但是你在这里的测试是错误的:

if (!$input.value.match(/^((P){1}[0-7]{1})-([A-Z]{2,3})-([0-9]{5})$/) || !$input.value.match(/^SOT-([A-Z]{2,3})-([0-9]{5})$/)) {

你在两个否定上使用OR。如果一个代码匹配第一个正则表达式,那么它将不匹配第二个正则表达式,表达式为真,反之亦然。

试试这个表单:

if ($input.value.match(/^((P){1}[0-7]{1})-([A-Z]{2,3})-([0-9]{5})$/) ||
$input.value.match(/^SOT-([A-Z]{2,3})-([0-9]{5})$/)) {
// Value matches successfully
} else {
// Value doesn't match
}

或者,将两个选项构建到一个正则表达式中,那么只需要做一个测试:

if ($input.value.match(/^(SOT|P[0-7])-([A-Z]{2,3})-([0-9]{5})$/)) {
// Match
} else {
// No match
}

在第一组中查找SOTP0P7,然后像以前一样进行。

最新更新