如何在输入字段中只允许英文字母?

Posted

技术标签:

【中文标题】如何在输入字段中只允许英文字母?【英文标题】:How to allow only English letters in input fields? 【发布时间】:2019-02-10 17:20:15 【问题描述】:

所以,这是我的输入字段:

<input type=type name=name />

我怎样才能只允许英文字母?

这是RegEx,我相信我应该使用:/[A-Za-z]/ig

https://regex101.com/r/upWFNy/1

我假设onChange() 事件应该与setState()event.target.value 结合使用。

谢谢。

附言。我需要在打字时进行此操作。

【问题讨论】:

这里已经概述了:***.com/questions/7144167/… @KevinLewis,嗨。您能否更新您的答案,但仅限英文,请不要数字?谢谢。 英语是一种有趣的语言,因为它使用了许多不在其“字母表”中的字母。所以,你确定你想要这个吗?如果是这样,也许您应该将其重述为大写和小写 Basic Latin 字母。 注意:您无法告诉网络浏览器允许或不允许哪些字符。但是您可以使用各种事件触发的 javascripthtml 模式来删除不需要的字符。这就是您将在答案中看到的内容。 【参考方案1】:

我会试试这个onChange 函数:

onChange=(e) => 
  let value = e.target.value

  value = value.replace(/[^A-Za-z]/ig, '')

  this.setState(
    value,
  )

查看代码:https://codepen.io/bozdoz/pen/vzJgQB

这个想法是用^ 反转你的正则表达式匹配器,并用'' 替换所有-A-z 字符

【讨论】:

是的.. 但对我来说,问题是value 总是空的。当我输入文本时,它会动态填充。这就是为什么它在value=this.state.value@bozdoz 失败 对于 jQuery,使用 $(this).val($(this).val().replace(/[^A-Za-z]/ig, ''))【参考方案2】:

您可以在输入中使用模式属性。

    <input pattern = “[A-Za-z]”>

【讨论】:

【参考方案3】:

这应该可以解决问题,除了 ascii 0-127 是英文字符之外的所有字符都应该被排除,o 到 127 还给你空格,+,-,/ 和标点符号很有用,如果你只想要字母,那么 [ ^Az] 应该可以解决问题,如果您需要非空格字符,那么 [^Az\s] 应该可以工作:

document.getElementById('english').addEventListener('input', function()
  this.value = this.value.replace(/[^\x00-\x7F]+/ig, '');
);

反应方式:

class InputEnglish extends React.Component 
  constructor()
    super();
    this.state = value: '';
    this.onChange = this.onChange.bind(this);
  
  onChange(e) 
    let val = e.target.value.replace(/[^\x00-\x7F]/ig, '');
    this.setState(state => ( value: val ));
  
  render() 
    return (<input 
        value=this.state.value
        onChange=this.onChange
    />);
  

https://codepen.io/anon/pen/QVMgrd

【讨论】:

嗨,你能用 React 的方式写吗? @JohnSam 在 React 中做的不多,但这应该可以。 @JohnSam 看看它在那里工作的帖子中的 codepen。如果它仍然不起作用,请告诉我。 :) 是的.. 但对我来说,问题是value 总是空的。当我输入文本时,它会动态填充。这就是它无法获取value 的原因。【参考方案4】:

您可以使用/[A-Za-z]/ 正则表达式和input 事件处理程序,每次元素值更改时都会触发该事件处理程序。如下所示:

const regex = /[A-Za-z]/;
function validate(e) 
  const chars = e.target.value.split('');
  const char = chars.pop();
  if (!regex.test(char)) 
    e.target.value = chars.join('');
    console.log(`$char is not a valid character.`);
  

document.querySelector('#myInput').addEventListener('input', validate);
<label for="myInput">Type some text:</label>
<input id="myInput" type="text" />

【讨论】:

如果我在输入的中间键入、粘贴或删除无效字符,这将不起作用。看看这个:***.com/questions/51065370/… @Danziger 我尝试在 Chrome v 85 上粘贴一个非字母字符示例,它似乎可以正常工作。您有没有在特定浏览器中无法运行的示例? 如果你把它粘贴到最后就可以了。尝试将光标移动到左侧并将其粘贴到那里。我也在使用 Chrome 85。【参考方案5】:

您可以尝试使用 Regx 来解决此问题。只需使用 regx 检查输入的字符是否为字母。如果不是,则不要更新状态值。

import React from "react";

class InputValidationDemo extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
      type: "text",
      name: "username",
      value: ""
    ;
  
  onChange = (e) => 
    const re = /^[A-Za-z]+$/;
    if (e.target.value === "" || re.test(e.target.value))
      this.setState( value: e.target.value );
  ;

  render() 
    const  type, name, value  = this.state;
    return (
      <div>
        <input type=type name=name value=value onChange=this.onChange />
      </div>
    );
  

export default InputValidationDemo;

https://codesandbox.io/s/react-input-only-letters-qyf2j

重要的部分是正则表达式。你可以改变你的 通过更改正则表达式来验证类型。

【讨论】:

【参考方案6】:
  alphacheck(e: any) 
    const regex = /[A-Za-z]/;
    const chars = e.target.value.split('');
    const char = chars.pop();
    console.log(char);
    if (!regex.test(char)) 
      e.target.value = chars.join('');
      alert("Please enter only alphabets");
      e.preventDefault();
      return false;
     
    
    else 
      return true;
    
  


<input placeholder="Full Name" formControlName="fullName"  pattern="[a-zA-Z]*"  (keypress)="alphacheck($event)"  name="fullname" value="" type="text" class="form-control">

【讨论】:

请在您的回答中提供一些解释。

以上是关于如何在输入字段中只允许英文字母?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“数字”类型的 html 输入允许在字段中输入字母“e”?

在文本框中只允许前两个和后两个是字母,中间是数字(例如 EE123456789IN)

如何在表格的一个列单元格中输入字母,而在另一列单元格中只输入数字?

输入字段字符序列

C# winform 程序中如何限制一个文本框中只输入数字和字母呢?

JavaScript - 如何检查是不是在数字输入字段中输入了字母字符或符号[重复]