pattern - Regex: cómo hacer coincidir una cadena que no es solo números
regex to validate numbers only (11)
¿Es posible escribir una expresión regular que coincida con todas las cadenas que no solo contienen números? Si tenemos estas cadenas:
- a B C
- a4c
- 4bc
- ab4
- 123
Debe coincidir con los cuatro primero, pero no el último. He intentado juguetear en RegexBuddy con lookaheads y esas cosas, pero parece que no puedo resolverlo.
A menos que me esté perdiendo algo, creo que la expresión regular más concisa es ...
//D/
... o en otras palabras, ¿hay un no dígito en la cadena?
Estoy usando /^[0-9]*$/gm
en mi código JavaScript para ver si la cadena es solo números. Si es así, entonces debería fallar, de lo contrario devolverá la cadena.
A continuación se muestra un fragmento de código de trabajo con casos de prueba:
function isValidURL(string) {
var res = string.match(/^[0-9]*$/gm);
if (res == null)
return string;
else
return "fail";
};
var testCase1 = "abc";
console.log(isValidURL(testCase1)); // abc
var testCase2 = "a4c";
console.log(isValidURL(testCase2)); // a4c
var testCase3 = "4bc";
console.log(isValidURL(testCase3)); // 4bc
var testCase4 = "ab4";
console.log(isValidURL(testCase4)); // ab4
var testCase5 = "123"; // fail here
console.log(isValidURL(testCase5));
Prueba esto:
/^.*/D+.*$/
Devuelve verdadero si hay algún símbolo, que no es un número. Funciona bien con todos los idiomas.
Si estás tratando de hacer coincidir mundos que tienen al menos una letra pero están formados por números y letras (o solo letras), esto es lo que he usado:
(/d*[a-zA-Z]+/d*)+
Si queremos restringir los caracteres válidos para que la cadena se pueda hacer a partir de un conjunto limitado de caracteres, intente esto:
(?!^/d+$)^[a-zA-Z0-9_-]{3,}$
o
(?!^/d+$)^[/w-]{3,}$
/ / w + /: Coincide con cualquier letra, número o guión bajo. cualquier caracter de palabra
Tuve que hacer algo similar en MySQL y lo siguiente, aunque más simplificado, parece haber funcionado para mí:
donde nombre de campo regexp ^[a-zA-Z0-9]+$
y nombre de campo NO REGEXP ^[0-9]+$
Esto muestra todos los campos que son alfabéticos y alfanuméricos, pero los campos que son solo numéricos están ocultos. Esto parece funcionar.
ejemplo:
name1 - Mostrado
nombre - mostrado
name2 - Mostrado
name3 - Mostrado
name4 - Mostrado
n4ame - Mostrado
324234234 - No se muestra
Ya que dijo " coincidir ", no solo validar, la siguiente expresión regular coincidirá correctamente
/b.*[a-zA-Z]+.*/b
Pasando las pruebas:
abc
a4c
4bc
ab4
1b1
11b
b11
Pruebas de fracaso:
123
jjnguy lo tuvo correcto (si es ligeramente redundante) en una revisión anterior .
.*?[^0-9].*
@Chad , tu expresión regular,
/b.*[a-zA-Z]+.*/b
probablemente debería permitir que no haya letras (p. ej., puntuación) aunque los ejemplos de Svish no incluyeron una. El requisito principal de Svish era: no todos los dígitos.
/b.*[^0-9]+.*/b
Entonces, no necesita el + allí, ya que todo lo que necesita es garantizar que haya 1 dígito que no esté allí (más podría haber allí según lo cubierto por el. * En los extremos).
/b.*[^0-9].*/b
A continuación, puede eliminar la / b en cualquiera de los extremos, ya que son restricciones innecesarias (invocando la referencia a alfanum y _).
.*[^0-9].*
Finalmente, tenga en cuenta que esta última expresión regular muestra que el problema se puede resolver solo con lo básico, los elementos básicos que han existido durante décadas (por ejemplo, no es necesario para la función de anticipación). En inglés, la pregunta era lógicamente equivalente a simplemente pedir que se encuentre 1 carácter de contra-ejemplo dentro de una cadena.
Podemos probar esta expresión regular en un navegador copiando lo siguiente en la barra de ubicación, reemplazando la cadena "6576576i7567" con lo que quieras probar.
javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));
(?!^/d+$)^.+$
Esto dice lookahead para las líneas que no contienen todos los dígitos y coinciden con toda la línea.
.*[^0-9]{1,}.*
Funciona bien para nosotros.
Queremos usar la respuesta utilizada, pero no está funcionando dentro del modelo YANG.
Y el que proporcioné aquí es fácil de entender y está claro: el principio y el final pueden ser cualquier carácter, pero, pero debe haber al menos un carácter NO NUMÉRICO, que es el mejor.
/^/d*[a-z][a-z/d]*$/
Puede ser un dígito al principio, luego al menos una letra, luego letras o dígitos