2017-09-12 49 views
1

我有图案验证一个<input>元件。HTML模式匹配不工作

<input type="text" id="some" pattern="^[A-Z]{5}$" name="some" maxlength="5" style="text-transform:uppercase" required/> 

如果用户输入全部大写字符,但是如果任何字符是小写字母,则模式匹配工作。为什么模式匹配不考虑style="text-transform:uppercase"

+0

检查,我想这是因为它适用变换前的模式。所以,你在做什么是毫无意义的。由于只能输入大写字母,因此不能将任何内容转换为大写字母。接受小写字母并转换它们,或只接受大写字母。 –

回答

2

text-transform仅为视觉变化,而不是一个数据变化。

请看下面的例子来调试<input>

function debug() 
 
{ 
 
    let inpItem = document.getElementById('some'); 
 
    let inpValue = document.getElementById('some').value; 
 
    
 
    //alert the actual value on input. 
 
    console.log(inpValue); 
 
    
 
    //set text-transform to default. 
 
    inpItem.style='text-transform:none'; 
 
}
input { 
 
    text-transform:uppercase; 
 
}
<button onclick="debug()">Debug</button> 
 
<input type="text" id="some" pattern="^[A-Z]{5}$" name="some" maxlength="5" required/>

你怎么只能输入大写字母?

您可以使用JavaScript来的所有输入值设置为大写的值。

function debug() 
 
{ 
 
    let inpItem = document.getElementById('some'); 
 
    let inpValue = document.getElementById('some').value; 
 
    
 
    //alert the actual value on input. 
 
    console.log(inpValue); 
 
    
 
    //set text-transform to default. 
 
    inpItem.style='text-transform:none'; 
 
}
<button onclick="debug()">Debug</button> 
 
<input type="text" id="some" pattern="^[A-Z]{5}$" name="some" maxlength="5" onkeyup="javascript:this.value=this.value.toUpperCase();" required/>

1

我不知道为什么,这是happenning,也许图案之前的风格是考虑到输入文本处理,但我看你正试图创建一个模式来接受最多五个拉丁字符(大写或小写的,因为你是他们全部更改为大写),那么你为什么不只是添加小写字母的模式?

pattern="^[A-Za-z]{5}$" 
1

模式忽略text-decoration: uppercase;,因为它是唯一的造型和原始文本仍在格式化它输入的方式。

你应该改变你的图案来检查大写和小写符号。

^[A-Za-z]{5}$

0

你的正则表达式将只如果有5个连续的大写字母,您可以在这里http://regexr.com