Javascript 字符串验证.如何在字符串中只写一次字符,并且只在开头写一次
Javascript string validation. How to write a character only once in string and only in the start?
我正在为电话号码编写验证。我需要允许用户仅在输入字段的开头写入+
字符,并防止用户稍后在字段中写入该字符。
换句话说:
+11111111
- 对,
111111111
- 对,
+111+111+
- 假,
1111+111+
- 假
问题是我需要在键入时执行验证。因此,我无法在下属后分析整个字符串,因此无法获取+
字符的位置,因为"keyup"总是返回0
。
我尝试了很多方法,这是其中之一:
$('#signup-form').find('input[name="phone"]').on('keyup', function(e) {
// prevent from typing letters
$(this).val($(this).val().replace(/[^'d.+]/g, ''));
var textVal = $(this).val();
// check if + character occurs
if(textVal === '+'){
// remove + from occurring twice
// check if + character is not the first
if(textVal.indexOf('+') > 0){
var newValRem = textVal.replace(/'+/, '');
$(this).val(newValRem);
}
}
});
当我尝试用空字符串替换+
字符时,它只被替换一次,这还不够,因为用户可能会错误地键入它很多次。
这是小提琴的链接:https://jsfiddle.net/johannesMt/rghLowxq/6/
在这种情况下,请给我任何提示。谢谢!
为了帮助您进行当前的代码修复(@Thomas Mauduit-Blin 是对的,这里还有很多事情要做,而不仅仅是在开头允许加号),您可以删除任何字符前面的加号符号。只需捕获该字符并使用替换模式中的反向引用进行还原:
$(this).val($(this).val().replace(/[^'d.+]|(.)'++/g, '$1'));
请参阅更新的小提琴和正则表达式演示。
该模式使用(.)'++
替代方法进行更新。 (.)
捕获除组 1 中的换行符之外的任何字符,该换行符后跟一个或多个加号,并且在替换期间$1
在反向引用的帮助下将组 1 的内容放回原处。
为了更好的验证 为什么不使用 Jquery maskedinput 库,它将为您完成许多额外的任务,而不会为其他目的增加开销
$("#phone").mask("+999-999-9999");
$("#phone").mask("+9999-999-9999");
$("#phone").mask("+99999999999");
如果要自己进行验证,则必须使用正则表达式。
但是,正如此处另一个相关线程中所述:
不要使用正则表达式来验证复杂的实际数据,如电话号码或 URL。使用专用库。
您必须让用户输入无效的电话号码,并在以后执行检查,或者在表单提交和/或服务器端执行检查。在这里,您需要处理"+"字符,但是要进行可靠的验证,还有很多其他事情要做。
如果你的 textVal 有 +
,indexOf
只会检查第一次出现。您需要确保第一个字符未被 indexOf
选中。因此,请使用substring
从等式中取出第一个字符。
只需更换
if(textVal.indexOf('+') > 0){
跟
if(textVal.substring(1).indexOf('+') > -1){
演示
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- 一次单击一下即可在句子中显示大字符串
- 字符串拆分并获取第一次和最后一次出现
- Node.js一次替换多个字符串
- Javascript 字符串验证.如何在字符串中只写一次字符,并且只在开头写一次
- 如何使用 javascript 一次显示此数组的字符串内容
- 如何让 JavaScript 一次运行一个字符串
- 将匹配字符串中最后一次出现的点的正则表达式
- JavaScript 正则表达式,用于检查单个特殊字符是否在字符串中出现一次
- 删除/隐藏链接后最后一次出现的字符串
- JS字符串仅替换每隔一次
- 删除javascript中最后一次出现的字符串
- 如何使用String.charCodeAt();一次获取和存储字符串中每个字母的char代码值并存储它们
- Javascript Regex匹配字符串最后一次出现后的所有内容
- 在字符串中特定字符最后一次出现之前插入
- 使用javascript进行大写,每隔换行一次,并在每一新行的开头添加字符串
- regex-查找最后一次出现之前的字符串
- 一次加载两个HTML文档(从字符串加载iframe内容)
- 使用javascript replace()来匹配字符串的最后一次出现
- 缓存——一次用查询字符串更新多个js文件